如何在反向外键上选择相关?

时间:2011-07-31 02:28:14

标签: django django-models django-orm

  

可能重复:
  A left outer reverse select_related in Django?

BlogPost有很多Comment个。我想获得BlogPost的列表及其所有评论。

因此,我有

BlogPost.objects.filter(my_filter).select_related()

但是ForeignKey位于Comment,而不是BlogPost,因此select_related()不会预取任何评论。有没有办法让这个工作?

我无法撤消查询(Comment.objects...),因为select_related() 获取的其他对象将无效。我需要双向工作。

1 个答案:

答案 0 :(得分:-1)

为什么不提取评论,然后使用regroup模板标记来显示它们:

# Select all Comments with BlogPost data - one query
comments = Comment.objects.select_related('blog_post').order_by('-blog_post').all()

然后在模板中:

{% regroup comments by blog_post as posts %}
{% for blog_post in posts %}

    <p>Blog post {{ blog_post.title }}</p>
    <ul>
    {% for comment in blog_post.comments %}
    ...
    {% endfor %}
    </ul>
    </p>
{% endfor %}