这些是我的模特:
class Comment(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField(_('object ID'))
content_object = generic.GenericForeignKey()
user = models.ForeignKey(User)
comment = models.TextField(_('comment'))
class Post(models.Model):
title = models.CharField(_('name'), max_length=80)
creator = models.ForeignKey(User, related_name="created_posts")
created = models.DateTimeField(_('created'), default=datetime.now)
body = models.TextField(_('body'), null=True, blank=True)
现在在我的views.py中,我收到了一篇关于这个结构的帖子:
post = get_object_or_404(Post, id=id)
在我的views.py中,获得该帖子的所有评论的最有效查询(使用ORM)是什么?
答案 0 :(得分:3)
您应该在帖子上定义comments = generic.GenericRelation(Comment)
,以便您从发布到评论轻松访问。一旦你完成了,这是一个简单的向后关系:
comments = post.comments.all()
请注意,这不是效率问题。通过向后泛型关系获取所有相关项目将始终产生两个查询 - 一个用于获取相关的ContentType,该类型在首次查找时自动缓存,一次用于获取实际项目。
如果你曾经问过如何尽可能有效地获得多个帖子的所有评论,我会指向my blog以获得一个好的技巧,但是因为你没有我不会因为那样会只是在博客上唠叨。