【问题标题】:Efficient query with Generic Relations使用通用关系进行高效查询
【发布时间】:2011-02-22 08:31:20
【问题描述】:

这些是我的模型:

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 中,获取该帖子的所有 cmets 最有效的查询是什么(使用 ORM)?

【问题讨论】:

    标签: django django-views django-orm


    【解决方案1】:

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

    comments = post.comments.all()
    

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

    如果您问如何尽可能高效地获取多个帖子的所有 cmets,我会向您指出 my blog 以获得良好的技术,但既然您没有,我不会因为那只是博客嫖娼。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2020-09-02
      • 2017-03-01
      • 2010-12-13
      • 2017-06-13
      • 1970-01-01
      相关资源
      最近更新 更多