例)部署毎の目標合計金額を取得する
目標 - target
部署 - section
社員 - user
model.py
class Target(BaseModel):
""" 目標モデル """
# 金額
amount = models.IntegerField()
# 社員ID
user = models.ForeignKey(User, on_delete=models.PROTECT)
# 部署ID
section = models.ForeignKey(Section, on_delete=models.PROTECT)
group_by.py
# 部署毎の目標合計金額
total_amount_by_section = (
Target.objects
.values("section_id")
.annotate(section_total=Sum("amount"))
.values("section_id", "section_total")
)
1度目のvaluesでsection_idにのみ取得項目を絞り込みますが、後続のannotateでamountの合計値を算出してもエラーにはなりません。発行SQLは下記の通り
total_amount.sql
SELECT
"target"."section_id",
SUM("target"."amount") AS "section_total"
FROM
"target"
GROUP BY
"target"."section_id";