:
prefetch_query = Prefetch('message_set__title', queryset=Message.objects.all().order_by('-id'), to_attr='message_titles')
folders = Folder.objects.all().prefetch_related(prefetch_query)
して、テンプレートのトップ10を取得するためにslice
を使用あなたはprefetch_related
を使用して試みることができる:あなたのテンプレートで次に
# get the folders
folders = Folder.objects.all().prefetch_related('message_set')
# create a result list
result = []
# populate result list
result = [{'folder': f.title, 'messages': f.message_set.values('title').order_by('-id')[:10]} for f in folders]
# every f.message_set... won't hit database, because of prefetch_related
:
<ul>
{% for res in result %}
<li>
{% for message in res.messages %}
{{ message.title }}
{% endfor %}
</li>
{% endfor %}
</ul>
テンプレートでregroup
を見てみることもできます。
免責事項:このコードは、テンプレートではなく類似のモデル構造でテストされています。多少変更する必要があるかもしれません。あなたのニーズに合わせて
「最新」をここでどのように定義しますか?あなたは 'DateTimeField'も持っていますか? – AKS
簡略化のため、メッセージIDは –
です。@DmitriyYusupovメッセージIDは日付ではありません。 – Gocht