我得到这些查询结果
<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'))
)
您应该从值中排除 pk
,您还应该在注释中添加一个 Sum(..)
函数:
from django.db.models import <b>Sum</b>
max_total_gross_per_ticket = Ticket.objects.filter(
event__organizer__in=self.organizers,
event__status=EventStatus.LIVE,
).values(<b>'event__pk'</b>).annotate(
total_gross=<b>Sum(</b>F('quantity') * F('price_gross')<b>)</b>,
).order_by('event__pk')
然而,在这里注释 Event
对象更有意义,例如:
from django.db.models import <b>Sum</b>
Event.objects.filter(
organizer__in=self.organizers,
status=EventStatus.LIVE
).annotate(
<b>total_gross=Sum(F('tickets__quantity') * F('tickets__price_gross'))</b>
)
然后 Event
将有一个额外的属性 total_gross
,其中包含门票的总和(他们的 quantity
乘以他们的 price_gross
)。
我是一名优秀的程序员,十分优秀!