如何在django中将两列与group by相乘和相加

rod*_*ixd 8 python sql django group-by django-models

我需要在Django中执行以下查询:

SELECT sum(T.width * T.height) as amount
FROM triangle T
WHERE T.type = 'normal'
GROUP BY S.color
Run Code Online (Sandbox Code Playgroud)

我怎么能用你的django ORM做到这一点?我试过这个:

Triangle.objects.filter(type='normal').\
                 extra(select={'total':'width*height'}).\
                 values('id', 'total').\
                 annotate(amount=Sum('total'))
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我得到的错误是TOTAL不在模型中.我该如何解决?

ale*_*cxe 11

这是你可以做的:

Triangle.objects.filter(type="normal").values('color').annotate(amount=Sum('id', field="width * height")
Run Code Online (Sandbox Code Playgroud)

这将产生以下查询(为了便于阅读,我已经简化了):

SELECT color, sum(width * height) as amount
FROM triangle 
WHERE type = 'normal'
GROUP BY color
Run Code Online (Sandbox Code Playgroud)

注:我认为color是的领域Triangle模型等领域.