算出当前时间的月份总和数据,这里使用之前讲到的TruncMonth
from django.db.models.functions import TruncMonth
# 打印看下queryset里面月份
query_values=queryset.annotate(month=TruncMonth('created_at')).values('month')
==>打印出来的结果,如下是一堆的时间,而且时间都一样,是每个月最开始的时间,就感觉把当前的query时间统一变成月份的最初时间
{'month': datetime.datetime(2019, 11, 1, 0, 0)}
{'month': datetime.datetime(2019, 11, 1, 0, 0)}
{'month': datetime.datetime(2019, 11, 1, 0, 0)}
{'month': datetime.datetime(2019, 11, 1, 0, 0)}
{'month': datetime.datetime(2019, 11, 1, 0, 0)}
{'month': datetime.datetime(2019, 11, 1, 0, 0)}
.....
按照上面的情况,下面我们就可以进行月份的分组聚合计算
如果不指定时间范围,我们可以直接进行分组
from django.db.models import Sum
from django.db.models.functions import TruncMonth
按照月份分组算出各个月份的合同金额总和
query=queryset.annotate(month=TruncMonth('created_at')).values('month').annotate(
contract_amount=Sum('contract_amount')
)
加上时间范围如下: 算出时间在created_range在这之间月份的每月合同金额总和
created_range=['2019-11-11','2019-12-12']
queryset.annotate(month=TruncMonth('created_at')).filter(month__range=created_range).annotate(
contract_amount=Sum('contract_amount'))
算某月的总和,利用aggregate,并且制定时间,这里要注意month制定的是某个月的1号
queryset.annotate(month=TruncMonth('created_at')).filter(month='2019-11-01').aggregate(
contract_amount=Sum('contract_amount'))
网友评论