Django对DateField()数据进行按月/按季分组

3 投票
1 回答
1172 浏览
提问于 2025-04-16 05:19

我有一个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),或者根据你的数据库的日期时间功能使用其他的计算方式。

撰写回答