我需要在Django中执行以下查询:
SELECT sum(T.width * T.height) as amount
FROM triangle T
WHERE T.type = 'normal'
GROUP BY S.color
如何使用django ORM执行此操作? 我试过这个:
Triangle.objects.filter(type='normal').\
extra(select={'total':'width*height'}).\
values('id', 'total').\
annotate(amount=Sum('total'))
但它不起作用,我得到的错误是TOTAL不在模型中。我该如何解决?
答案 0 :(得分:11)
以下是您可以做的事情:
Triangle.objects.filter(type="normal").values('color').annotate(amount=Sum('id', field="width * height")
这将产生以下查询(我为了便于阅读而简化了):
SELECT color, sum(width * height) as amount
FROM triangle
WHERE type = 'normal'
GROUP BY color
注意:我假设color
是Triangle
模型的字段,与其他字段一样。