我有一个有两列的表:listing和bid。每个列表可以得到多个出价。我想运行一个Django查询,返回每个列表的最高出价。
在SQL中,我将这样做:SELECT listing, max(amount) FROM Bid GROUP BY listing
在django中我尝试了这个。它只返回整个表中最高的出价
Bid.objects.values('listing','amount').aggregate(Max('amount'))
您可以.annotate(…)
[Django-doc] these with:
from django.db.models import Max
Bid.objects.values('listing').annotate(
max_amount=Max('amount')
).order_by('listing')
如果listing
是ForeignKey
,那么最好对该模型进行注释,例如:
from django.db.models import Max
Listing.objects.annotate(
max_bid=Max('bid__amount')
)
因为这些是Listing
模型,因此模型层不会"腐蚀"。