Django ORM group by date from datetime with groups 聚合

Django ORM group by date from datetime with groups aggregation

我有一个 table,我想先做一个 grouping by,然后将这些组聚合成一些值。所以...

Table "统计数据"

| owner_id | created_at | views | clicks | ... other numbers

我这样做的目的是:

    Statistic.objects.filter(
        owner_id=X
    ).annotate(
        day=Cast('created_at', DateField())
    ).values(
        'day'
    ).annotate(
        models.Avg('views')
    )

... 是一个 list,其数据按 date 分组,从 created_atDateTime 字段)投射,并具有聚合值,例如平均观看次数或点击次数等...

问题是 django 添加了 group by "statistic"."created_at",这违反了我的要求。我曾尝试 运行 原始 SQL 查询,但不幸的是,它还需要按 created_at.

分组

请帮助我,解释为什么需要这样做,以及如何解决我的任务?

您可以使用 TruncDate expression [Django-doc]:

截断日期
from django.db.models import Avg
from django.db.models.functions import TruncDate

Statistic.objects.filter(
        owner_id=X
).values(
    date=<b>TruncDate('created_at')</b>
).annotate(
    Avg('views')
).order_by('date')