【发布时间】:2015-06-03 13:17:06
【问题描述】:
我在 Django 中有一个模型,它有一个命中数据库的属性:
class Post(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Comment(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
comment = models.CharField()
post = models.ForeignKey(Post, related_name='comments')
@property
def previous_comment(self):
try:
return self.post.comments.filter(created_at__lt=self.created_at).order_by('-created_at')[0]
except IndexError:
return None
但是当我使用Comment.objects.all() 获取所有评论对象时,显然每次将每个对象包含在查询集中以查找先前的评论时,它都会访问数据库。
我觉得我这样做的方式非常错误。如何在查询集中的每个对象中包含 previous_comment 属性而不多次访问数据库?
【问题讨论】:
-
你可以构建一个双向链表,外键指向
next和prev