Django ORM, group by day

偶尔善良 提交于 2019-12-18 03:02:10

问题


I am trying to group products by DAY, however date_created is a datetime field.

Product.objects.values('date_created') \
               .annotate(available=Count('available_quantity'))

returns:

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

I want:

[
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
]

edit: database backend MYSQL


回答1:


Inspired by this question try this for mysql

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



回答2:


In Django 1.4, you could use .dates('date_created', 'day') instead of .values().

Try this code snippet:

Product.objects.annotate(available=Count('available_quantity')) \
  .dates('date_created', 'day')

This should return:

[
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
]



回答3:


Similar approach from San4ez's answer, but returning dates as 'YYYY-MM-DD' instead of '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'))


来源:https://stackoverflow.com/questions/10154227/django-orm-group-by-day

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!