2011-07-31 2 views
12

Можно создать дубликат:
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

Почему вы не получать комментарии, а затем использовать 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 %} 
+2

Я думаю, что из-за моего последнего пункта. 'BlogPost' имеет другие внешние ключи, которые' select_related' * does * работают, и я хочу, чтобы он продолжал работать над ними. Выбрав комментарии, вы просто перекладываете проблему. – mpen

+6

Другая проблема с этим решением заключается в том, что он не получит сообщений в блоге без комментариев – babonk

Смежные вопросы