Django对DateField()数据进行按月/按季分组
我有一个Django模型,其中包含一个DateField()属性,除此之外还有其他内容。
class Table():
date = models.DateField()
value = models.FloatField()
我正在写一个视图,用来按周、按月、按季度和按年对这些数据进行分组。我现在用硬编码的方式计算每个月的值,方法很简单,就是把这个月的所有值加起来,然后除以这个月的记录数。但我觉得应该有更优雅的方法来实现这个。
我想要的效果大概是这样的:
get_monthly(Table.objects.all())
>>> [123, 412, 123, 534, 234, 423, 312, 412, 123, 534, 234, 423]
get_quarterly(Table.objects.all())
>>> [123, 412, 123, 534]
列表中的值是每个月的平均值。
有没有人能帮帮我?
1 个回答
3
你可以利用模型的查询功能来实现这个。下面是一个每月查询的例子:
from django.db.models import Avg
Table.objects.extra(select={'month':"strftime('%m',date)"}).values('month').annotate(Avg('value'))
在这里,你可能想把 strftime('%m',date)
替换成 month(date)
,或者根据你的数据库的日期时间功能使用其他的计算方式。