我想做一个总结的库存报告。为了使之成为可能,我需要这样的模型:
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
更新我现在用此代码获得GROUP BY
query = Inventario.objects.all().query
query.group_by = ['inventario_inventario.producto_id']
productos = QuerySet(query=query, model=Inventario)
但现在我不知道如何使“求和”功能:/
尝试使用annotate
代替aggregate
。aggregate
总结整个查询集,而annotate
为每个组生成值。例如,
productos = Inventario.objects.filter(cantidad__gt=0).values('producto').annotate(sum_cantidad=Sum('cantidad'))
查看django文档,了解更多详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句