Как выбрать_отсоединение по обратному внешнему ключу?
Возможный дубликат:
Левый внешний обратный select_related в Django?
A BlogPost
имеет много Comment
s. Я хочу получить список BlogPost
и все их комментарии.
Таким образом, у меня есть
BlogPost.objects.filter(my_filter).select_related()
Но ForeignKey находится на Comment
, а не BlogPost
, поэтому select_related()
не префикс комментариев. Есть ли способ заставить это работать?
Я не могу отменить запрос (Comment.objects...
), потому что тогда другие объекты, которые select_related()
не будут извлекать, не будут работать. Мне нужно, чтобы он работал в обоих направлениях.
Ответы
Ответ 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 %}