2011-12-23 123 views
32

que tiene un modeloDjango: Calcular la suma de los valores de columna a través de consultas

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

He intentado esto para calcular la suma de price en este queryset:

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

lo que está mal en esta consulta ? o ¿hay alguna otra forma de calcular la suma de la columna price?

Sé que esto se puede hacer utilizando for loop en queryset pero necesito una solución elegante.

Gracias!

Respuesta

91

Probablemente se esté buscando aggregate

from django.db.models import Sum 

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

thanx mucho;) eso es lo que estoy buscando! – Ahsan

10

Anotar añade un campo de resultados:

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

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

agregada devuelve un diccionario con el resultado preguntó:

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

uso agregado (Suma ('columna')) ['columna__sum']

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