Djangoのモデルで集計クエリというと、1.0以降でcount()が使えますが、1.1になってさらに多機能になっていました。
from django.db.models import Sum
_result = Detail.objects.all().values(‘category’).annotate(price=Sum(‘price’))for item in _result:print item
Detailというモデルがあって、それをcategoryというフィールドでグループ化し、priceというフィールドのsum(合計)を求めています。
values(~)は必須ではありません。グループ化しないと全体のsumですね。
annotate(得られる結果の名前=Sum(集計対象フィールド))
です。サンプルの「price」をsum_priceにしても結果は得られます。
また、annotateで利用できるのはsumだけでなく、Avg、Max、Min、Countも使用できます。サンプルコードだとSumしかインポートしていませんが、「*」でまとめてインポートするか、「Avg, Max, Min, Sum, Count」をそれぞれインポートしてあげれば使用できます。
ちなみに、サンプルコードで得られるitemは、Detailモデルのインスタンスではありません。辞書です。最初ここに気づかず、「?」となっていました。w