Django: вычислить сумму значений столбца с помощью запроса - PullRequest
54 голосов
/ 23 декабря 2011

У меня есть модель

class ItemPrice( models.Model ):
     price = models.DecimalField ( max_digits = 8, decimal_places=2 )
     ....

Я пытался вычислить сумму price в этом наборе запросов:

items = ItemPrice.objects.all().annotate(Sum('price'))

что не так в этом запросе? или есть какой-то другой способ вычислить сумму в столбце price?

Я знаю, что это можно сделать с помощью цикла for в наборе запросов, но мне нужно элегантное решение.

Спасибо!

Ответы [ 3 ]

144 голосов
/ 23 декабря 2011

Вы, вероятно, ищете aggregate

from django.db.models import Sum

ItemPrice.objects.aggregate(Sum('price'))
21 голосов
/ 27 апреля 2017

Annotate добавляет поле к результатам:

>> Order.objects.annotate(total_price=Sum('price'))
<QuerySet [<Order: L-555>, <Order: L-222>]>

>> orders.first().total_price
Decimal('340.00')

Агрегат возвращает диктат с заданным результатом:

>> Order.objects.aggregate(total_price=Sum('price'))
{'total_price': Decimal('1260.00')}
17 голосов
/ 07 декабря 2017

Использовать агрегат (Sum ('column')) ['column__sum']

sum = Sale.objects.filter(type='Flour').aggregate(Sum('column'))['column__sum']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...