0

这些是我的模型:

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)是什么?

4

1 回答 1

3

您应该comments = generic.GenericRelation(Comment)在帖子上定义,以便您轻松访问从帖子到评论。完成后,这是一个简单的反向关系:

comments = post.comments.all()

请注意,这实际上并不是效率问题。通过向后通用关系获取所有相关项目将始终产生最多两个查询 - 一个获取相关 ContentType,它在第一次查找时自动缓存,一次获取实际项目。

如果你问如何尽可能高效地获取多篇文章的所有评论,我会向你指出我的博客以获得一种好的技术,但既然你没有,我不会因为那只是博客嫖娼。

于 2010-05-21T13:10:49.500 回答