2011-12-23 54 views
32

計算列值的總和我有一個模型Django的:通過查詢

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

我嘗試這樣來計算這個查詢集的price總和:

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

什麼錯在此查詢?或者有沒有其他方法來計算price列的總和?

我知道這可以通過在queryset上使用for循環來完成,但我需要一個優雅的解決方案。

謝謝!

回答

91

你可能尋找aggregate

from django.db.models import Sum 

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

thanx很多;)這就是我看! – Ahsan 2011-12-23 13:01:11

10

註釋添加一個字段,以結果:

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

使用集合( Sum('column'))['column__sum']

sum = Sale.objects.filter(type='Flour').aggregate(Sum('column'))['column__sum']