按周,月,日分组

时间:2017-02-09 22:46:06

标签: django

我想根据模型的datetime属性按日期间隔对查询集进行分组。我希望在日常,逐周和逐月的基础上显示模型的平均值。

E.g。

  • 周开始01/01/2017 - 平均距离:30
  • 周开始于08/01/2017 - 平均距离:40 ...

可以使用标准的Django queryset API实现吗?

2 个答案:

答案 0 :(得分:4)

假设以下模型可能符合您的描述

class Activity(models.Model):
    timestamp = models.DateTimeField(auto_now_add=True, blank=True)
    distance  = models.IntegerField()

您可以通过以下查询获得每周统计信息

from django.db.models.functions import ExtractWeek, ExtractYear
from django.db.models import Sum, Count

stats = (Activity.objects
    .annotate(year=ExtractYear('timestamp'))
    .annotate(week=ExtractWeek('timestamp'))
    .values('year', 'week')
    .annotate(avg_distance=Avg('distance'))
)

样本输出

<QuerySet [{'year': 2018, 'week': 31, 'distance': 3.2}]>

要恢复一周的第一天,请选中Get date from week number

尤其是:

for record in stats:
    week = "{year}-W{week}-1".format(year=record['year'], week=record['week'])
    timestamp = datetime.datetime.strptime(week, "%Y-W%W-%w")

答案 1 :(得分:1)

有许多专门针对日期/日期时间字段的字段查找:weekdaymonth(应与year结合使用)等。