美文网首页
Django 根据月份信息统计数据

Django 根据月份信息统计数据

作者: forjie | 来源:发表于2019-12-18 11:12 被阅读0次

算出当前时间的月份总和数据,这里使用之前讲到的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'))

相关文章

网友评论

      本文标题:Django 根据月份信息统计数据

      本文链接:https://www.haomeiwen.com/subject/oxwynctx.html