问题
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