Наскільки я знаю, в Django ORM це неможливо зробити в один крок.
Але ви можете розділити його на два запити:
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]
)
Якщо ідентифікатори тортів прогресують разом із позначками часу bake_at, ви можете спростити та розрізнити описаний вище код (у випадку, якщо одночасно приходить два торти, ви можете отримати обидва):
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=
Якщо вищевказаний метод занадто повільний, то я знаю і другий метод - ви можете написати власний SQL, виробляючи лише ті тістечка, які є найгарячішими у відповідних хлібопекарнях, визначити його як ВИД баз даних, а потім написати для нього некеровану модель Django. Це також згадується у наведеному вище потоці django-users. Пряме посилання на оригінальну концепцію знаходиться тут:
http://web.archive.org/web/20130203180037/http://wolfram.kriesing.de/blog/index.php/2007/django-nice-and-critical-article#comment-48425
Сподіваюся, це допомагає.