How to select_related on reverse foreign key? [dup

2019-04-19 12:49发布

Possible Duplicate:
A left outer reverse select_related in Django?

A BlogPost has many Comments. I want to get a list of BlogPosts and all their comments.

Thus, I have

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

But the ForeignKey is on the Comment, not the BlogPost, so the select_related() doesn't prefetch any comments. Is there a way to get this to work?

I can't reverse the query (Comment.objects...) because then the other objects that the select_related() does fetch wouldn't work. I need it to work both ways.

1条回答
看我几分像从前
2楼-- · 2019-04-19 13:31

Why won't you fetch the comments and then use regroup template tag to display them:

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

Then in template:

{% 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 %}
查看更多
登录 后发表回答