Hacemos una revisión exhaustiva cada una de las secciones en nuestra página web con la meta de enseñarte siempre la información con la mayor veracidad y certera.
Solución:
Con Django 1.8 y superior, ahora puede pasar una expresión a su agregado:
from django.db.models import F
Task.objects.aggregate(total=Sum(F('progress') * F('estimated_days')))['total']
Las constantes también están disponibles, y todo es combinable:
from django.db.models import Value
Task.objects.aggregate(total=Sum('progress') / Value(10))['total']
Actualizar: por Django >= 1.8 siga la respuesta proporcionada por @kmmbvnr
es posible usando Django ORM:
esto es lo que debe hacer:
from django.db.models import Sum
total = ( Task.objects
.filter(your-filter-here)
.aggregate(
total=Sum('progress', field="progress*estimated_days")
)['total']
)
Nota: si los dos campos son de tipos diferentes, digamos integer
& float
el tipo que desea devolver debe pasarse como el primer parámetro de Sum
Es una respuesta tardía, pero supongo que ayudará a alguien que busque lo mismo.
La solución depende de la versión de Django.
-
django < 1.8
from django.db.models import Sum MyModel.objects.filter(
).aggregate(Sum('field1', field="field1*field2")) -
Django >= 1.8
from django.db.models import Sum, F MyModel.objects.filter(
).aggregate(Sum(F('field1')*F('field2')))
Agradecemos que desees añadir valor a nuestra información dando tu veteranía en los informes.