Django ORM,白天组

Hed*_*ide 28 python mysql django django-orm

我试图按DAY分组产品,但date_created是一个日期时间字段.

Product.objects.values('date_created') \
               .annotate(available=Count('available_quantity'))
Run Code Online (Sandbox Code Playgroud)

收益:

[
    {'date_created': datetime.datetime(2012, 4, 14, 13, 3, 6), 'available': 1},
    {'date_created': datetime.datetime(2012, 4, 14, 17, 12, 9), 'available': 1},
    ...
]
Run Code Online (Sandbox Code Playgroud)

我想要:

[
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
]
Run Code Online (Sandbox Code Playgroud)

编辑:数据库后端MYSQL

San*_*4ez 32

灵感来自这个问题,请尝试使用mysql

Product.objects.extra(select={'day': 'date( date_created )'}).values('day') \
               .annotate(available=Count('date_created'))
Run Code Online (Sandbox Code Playgroud)

  • 这很有帮助,但我必须在 values() 和 annotate() 之间使用显式 order_by() 清除默认排序。请参阅 https://docs.djangoproject.com/en/dev/topics/db/aggregation/#interaction-with-default-ordering-or-order-by。谢谢! (2认同)

Zan*_*non 5

San4ez的回答中的类似方法,但将日期返回为 'YYYY-MM-DD' 而不是 'datetime.datetime(YYYY, MM, DD)':

Product.objects.extra(select={'day': "TO_CHAR(date_created, 'YYYY-MM-DD')"})
               .values('day') \
               .order_by('day') \
               .annotate(available=Count('date_created'))
Run Code Online (Sandbox Code Playgroud)