Насколько я знаю, в 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, производящий только те Cakes, которые наиболее популярны в соответствующих пекарнях, определить его как базу данных 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
Надеюсь, это поможет.