Поскольку Django не выполняет объединение так, как вы ожидаете с объединениями SQL (см. Мой комментарий для дальнейшего объяснения), я решил бы это в представлении (или, возможно, в методе, добавленном в класс Thread
). Рассмотрим следующий пример:
def index(request):
res = []
for t in Thread.objects.filter(category__name='x'):
res.append((t, Post.objects.filter(thread=t).order_by('-datetime')[0]))
# Optionally sort by datetime here:
# res.sort(key=lambda x: x[1].datetime, reverse=True)
return render_to_response('index.html', {'result': res})
Затем вы можете использовать его в шаблоне следующим образом:
{% for r in res %}
Thread {{ r.0.name }}, last post by {{ r.1.author.name }} on {{ r.1.datetime }}.
{% endfor %}
# This would give something like this:
# Thread mythread, last post by john on Oct. 21, 2011, 1:52 a.m..
Создавая кортеж из Thread
s и Post
s, вы на самом деле не присоединяетесь к ним, но делаете их легко доступными в шаблоне.