私の知る限り、Django ORMでこれを行うワンステップの方法はありませんが、2つのクエリに分割できます。
from django.db.models import Max
bakeries = Bakery.objects.annotate(
hottest_cake_baked_at=Max('cake__baked_at')
)
hottest_cakes = Cake.objects.filter(
baked_at__in=[b.hottest_cake_baked_at for b in bakeries]
)
ケーキのIDがbake_atタイムスタンプとともに進行している場合は、上記のコードを単純化して明確にすることができます(2つのケーキが同時に到着した場合は、両方を取得できます)。
from django.db.models import Max
hottest_cake_ids = Bakery.objects.annotate(
hottest_cake_id=Max('cake__id')
).values_list('hottest_cake_id', flat=True)
hottest_cakes = Cake.objects.filter(id__in=hottest_cake_ids)
ところで、これに対するクレジットは、かつて私の同様の質問に答えたダニエル・ローズマンに行きます:
http://groups.google.pl/group/django-users/browse_thread/thread/3b3cd4cbad478d34/3e4c87f336696054?hl=pl&q=
上記の方法が遅すぎる場合は、2番目の方法も知っています-関連するパン屋で最もホットなケーキのみを生成するカスタムSQLを記述し、それをデータベースVIEWとして定義してから、そのためのアンマネージDjangoモデルを記述できます。上記のdjango-usersスレッドでも言及されています。元のコンセプトへの直接リンクはここにあります:
http://web.archive.org/web/20130203180037/http://wolfram.kriesing.de/blog/index.php/2007/django-nice-and-critical-article#comment-48425
お役に立てれば。