내가 아는 한, 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]
)
케이크의 id가 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)
이에 대한 BTW 크레딧은 한때 저의 비슷한 질문에 답한 Daniel Roseman에게 돌아갑니다.
http://groups.google.pl/group/django-users/browse_thread/thread/3b3cd4cbad478d34/3e4c87f336696054?hl=pl&q=
위의 방법이 너무 느리면 두 번째 방법도 알고 있습니다. 관련 베이커리에서 가장 인기있는 Cakes 만 생성하는 사용자 지정 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
도움이 되었기를 바랍니다.