我得到这些查询结果
<QuerySet [{'event__pk': 4, 'pk': 15, 'total_gross': 12340000}, {'event__pk': 4, 'pk': 13, 'total_gross': 123000}, {'event__pk': 5, 'pk': 22, 'total_gross': 1234000}]>
我要解决的问题是我尝试汇总total_gross
每个事件。但是,总是在我添加.aggregate(Sum('total_gross'))
时,Django才聚合所有内容。知道如何解决这个问题吗?
max_total_gross_per_ticket = (
Ticket.objects.filter(
event__organizer__in=self.organizers,
event__status=EventStatus.LIVE,
).values('event__pk', 'pk')
.order_by('event__pk')
.annotate(
total_gross=F('quantity') * F('price_gross'),
)
# .aggregate(Sum('total_gross'))
)
答案 0 :(得分:3)
您应该从值中排除pk
,还应该在注释中添加Sum(..)
函数:
from django.db.models import Sum
max_total_gross_per_ticket = Ticket.objects.filter(
event__organizer__in=self.organizers,
event__status=EventStatus.LIVE,
).values('event__pk').annotate(
total_gross=Sum(F('quantity') * F('price_gross')),
).order_by('event__pk')
在这里注释Event
对象更有意义,例如:
from django.db.models import Sum
Event.objects.filter(
organizer__in=self.organizers,
status=EventStatus.LIVE
).annotate(
total_gross=Sum(F('tickets__quantity') * F('tickets__price_gross'))
)
然后,Event
将具有一个额外的属性total_gross
,其中包含票证的总和(其quantity
乘以其price_gross
的票数)。