年、月、日ごとに集計する
from django.db.models import Sum from django.db.models.functions import TruncMonth month_sales = Person.objects.annotate( month=TruncMonth('sales__date')).annotate(total_sales=Sum('sales__sale') ).values('month', 'name','total_sales').order_by('month') print(month_sales)
TruncManthを使用することでデータを月毎にまとめることができます。
annotateでPersonモデルのmonthフィールドにsales__dateを月でまとめたもの(1日から31日までのデータが当月の1日としてまとめられる)を、total_salesには月でまとめたもののsaleの合計が代入されます。
TruncYearにすると年ごと、
TruncWeekにすると週ごと、
TruncDayにすると日ごと、
TruncHourにすると1時間ごと
にすることもできます。
annotateでPersonモデルのmonthフィールドにsales__dateを月でまとめたもの(1日から31日までのデータが当月の1日としてまとめられる)を、total_salesには月でまとめたもののsaleの合計が代入されます。
TruncYearにすると年ごと、
TruncWeekにすると週ごと、
TruncDayにすると日ごと、
TruncHourにすると1時間ごと
にすることもできます。