2011-12-23 3 views
32

У меня есть модельДжанго: Вычислить сумму значений столбцов с помощью запроса

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

Я попытался это вычислить сумму price в этом QuerySet:

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

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

Я знаю, что это можно сделать, используя for loop on queryset, но мне нужно элегантное решение.

Спасибо!

ответ

91

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

from django.db.models import Sum 

ItemPrice.objects.aggregate(Sum('price')) 
+0

thanx alot;) вот что я смотрю! – Ahsan

10

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

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

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

Совокупные возвращает Dict с результатом спросил:

>> Order.objects.aggregate(total_price=Sum('price')) 
{'total_price': Decimal('1260.00')} 
2

Используйте агрегат (Сумма («столбец»)) ['column__sum']

sum = Sale.objects.filter(type='Flour').aggregate(Sum('column'))['column__sum'] 
Смежные вопросы