Django: умножить внутри набора запросов - PullRequest
1 голос
/ 14 июня 2019

Интересно, является ли способ, которым я вычисляю quantity * price_gross, правильный способ сделать это? Или есть лучший способ умножить эти значения в наборе запросов Ticket.objects.?

event = Event.objects.get(pk=4)

test = Ticket.objects.filter(event=event).values('quantity', 'price_gross')
result = 0
for x in test:
    result += x['quantity']*x['price_gross']

print(result)

Обновлен:

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'))

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Вы можете пойти еще дальше, а также выполнить суммирование в базе данных (не проверено!, Но должно работать более или менее):

from django.db.models import F, Sum

result = (
    Ticket.objects.filter(event=event)
    .values('quantity', 'price_gross')
    .annotate(total=F('quantity') * F('price_gross'))
    .aggregate(Sum('total'))
)
0 голосов
/ 14 июня 2019

Да. Существует действительно способ сделать это, используя выражения запроса

test = Ticket.objects.filter(event=event).annotate(total=F('quantity') * F('price_gross'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...