11

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がモデルにないというエラーが表示されます. どうすれば修正できますか?

4

1 に答える 1

14

できることは次のとおりです。

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

于 2013-08-13T22:25:44.000 に答える