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

mpe*_*pen 12 django django-models django-orm

可能重复:
Django中的左外部反向select_related?

A BlogPost有很多个Comment.我想得到一份BlogPosts及其所有评论的清单.

因此,我有

BlogPost.objects.filter(my_filter).select_related()
Run Code Online (Sandbox Code Playgroud)

但是ForeignKey是在Comment,而不是BlogPost,所以select_related()不会预取任何评论.有没有办法让这个工作?

我不能反向查询(Comment.objects...),因为随后的其他对象select_related() 获取是行不通的.我需要双向工作.

Mar*_*mro -1

为什么不获取评论,然后使用重新分组模板标签来显示它们:

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

然后在模板中:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案的另一个问题是它不会获得没有评论的博客文章 (6认同)
  • 我想是因为我的最后一段。`BlogPost` 有其他外键,`select_lated` *确实*可以处理这些外键,我希望它继续处理这些外键。通过首先获取评论,您只是在转移问题。 (2认同)