Soweit ich weiß, gibt es in Django ORM keinen einstufigen Weg, dies zu tun.
Sie können es jedoch in zwei Abfragen aufteilen:
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]
)
Wenn die IDs von Kuchen zusammen mit den Zeitstempeln von bake_at fortschreiten, können Sie den obigen Code vereinfachen und eindeutig definieren (falls zwei Kuchen gleichzeitig ankommen, können Sie beide erhalten):
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)
Übrigens geht das an Daniel Roseman, der einmal eine ähnliche Frage von mir beantwortet hat:
http://groups.google.pl/group/django-users/browse_thread/thread/3b3cd4cbad478d34/3e4c87f336696054?hl=pl&q=
Wenn die obige Methode zu langsam ist, kenne ich auch die zweite Methode - Sie können benutzerdefiniertes SQL schreiben, das nur die Kuchen erzeugt, die in relevanten Bäckereien am heißesten sind, sie als Datenbankansicht definieren und dann ein nicht verwaltetes Django-Modell dafür schreiben. Es wird auch im obigen Thread für Django-Benutzer erwähnt. Der direkte Link zum ursprünglichen Konzept ist hier:
http://web.archive.org/web/20130203180037/http://wolfram.kriesing.de/blog/index.php/2007/django-nice-and-critical-article#comment-48425
Hoffe das hilft.