我想制作一份sumarized库存报告。为了实现这一点,我有这样的模型:
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中,我会使用正确的JOIN(
)制作类似SELECT producto.nombre as item, sum(cantidad) as cantidad,... FROM Inventario GROUP BY item
的内容
我会得到类似的东西:
|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
更新 我现在使用此代码获取GROUP BY
query = Inventario.objects.all().query
query.group_by = ['inventario_inventario.producto_id']
productos = QuerySet(query=query, model=Inventario)
但现在我不知道如何制作“SUM”功能:/
答案 0 :(得分:3)
尝试使用annotate
代替aggregate
。 aggregate
总结了整个查询集,而annotate
为每个组生成了值。如,
productos = Inventario.objects.filter(cantidad__gt=0).values('producto').annotate(sum_cantidad=Sum('cantidad'))
查看django docs了解详情。