2011-12-23 89 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']