Saltar al contenido

Agregación de Django: suma de la multiplicación de dos campos

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 & floatel 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *