Django Group_By и запрос SUM

Я хочу сделать сводный отчет о запасах. Чтобы сделать это, у меня есть моя модель:

class Inventario(models.Model):
 producto = models.ForeignKey(Producto)
 cantidad = models.DecimalField(default=0,decimal_places=2, max_digits=10)
 ubicacion = models.ForeignKey(Ubicacion, null=True, blank=True)
 def __unicode__(self):
 return self.producto.item

В SQL-RAW я сделаю что-то вроде SELECT producto.nombre as item, sum(cantidad) as cantidad,... FROM Inventario GROUP BY item с правильным JOIN, конечно

И я получу что-то вроде:

|Item------- | Cantidad|
|PROD1 | 20 |
|PROD2 | 10 |

Вместо

|Item------- | Cantidad|
|PROD1 | 5 |
|PROD1 | 5 |
|PROD1 | 10 |
|PROD2 | 9 |
|PROD2 | 1 |

Я хочу сделать это с помощью метода django, на самом деле у меня есть

productos = Inventario.objects.filter(cantidad__gt=0).aggregate(Sum('cantidad'))

И это возвращает мне только cantidad_sum:30

UPDATE Теперь я получаю GROUP BY с помощью этого кода

query = Inventario.objects.all().query
query.group_by = ['inventario_inventario.producto_id']
productos = QuerySet(query=query, model=Inventario)

но теперь я не знаю, как сделать функцию SUM:/

1 ответ

Попробуйте использовать annotate вместо aggregate. aggregate суммирует весь запрос, тогда как annotate генерирует значения для каждой группы. Например,

productos = Inventario.objects.filter(cantidad__gt=0).values('producto').annotate(sum_cantidad=Sum('cantidad'))

Ознакомьтесь с документами django для получения более подробной информации.

licensed under cc by-sa 3.0 with attribution.