tengo modelo:
class Sales(ModelWithCreator, models.Model): date = models.DateField(default=datetime.date.today) merchandise = models.ForeignKey(Merchandise) partner = models.ForeignKey(Partner) count = models.PositiveIntegerField() debt = models.PositiveIntegerField(default=0) price = models.PositiveIntegerField() cost = models.PositiveIntegerField()Tengo que obtener la suma de todos los objetos que modelan. Intenté eso:
Sales.objects.all().extra(select={ 'total': 'Sum(price * count - cost)' })Pero, tengo un error:
la columna "sales_sales.id" debe aparecer en la cláusula GROUP BY o usarse en una función agregada LÍNEA 1: SELECT (Sum(price * count - cost)) AS "total", "sales_sales"...
Creo que es posible que desee utilizar la función .aggregate() . Consulte la documentación de Django para Agregación .
Algo como esto (aunque no lo he probado):
Sales.objects.all().aggregate( total = Sum((F(price)*F(count)) - F(cost)) ) Además, esa misma documentación sugiere usar la función .query() para ver cuál es la consulta resultante. Eso podría ayudarte a ver qué está fallando.
Prueba esto
Sales.objects.all().extra(select={ 'total': 'Sum(price * count - cost)' }).values("total")