(这是SQL连接时线程的django版本:选择一对多关系中的最后一个记录)
假设我有一个客户表和一个采购表。每次购买都属于一个客户。我想获得所有客户的清单以及他们的上一次购买。是否可以在没有原始SQL且没有多个数据库查询的情况下完成?
您可以看一下类似的讨论:
从不同类别获取最新对象的Django查询
据我所知,在Django ORM中没有单步执行此操作的方法。
但是您可以将其分为两个查询:
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时间戳一起在进行,则可以简化上面的代码并消除歧义(如果两个蛋糕同时到达,则可以同时获得它们):
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)