问题
Possible Duplicate:
A left outer reverse select_related in Django?
A BlogPost
has many Comment
s. I want to get a list of BlogPost
s 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:
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 %}
来源:https://stackoverflow.com/questions/6887171/how-to-select-related-on-reverse-foreign-key