[Solved]-Django model group by datetime's date

17👍

Create a small function to extract just the date:

def extract_date(entity):
    'extracts the starting date from an entity'
    return entity.start_time.date()

Then you can use it with itertools.groupby:

from itertools import groupby

entities = Entity.objects.order_by('start_time')
for start_date, group in groupby(entities, key=extract_date):
    do_something_with(start_date, list(group))

Or, if you really want a list of lists:

entities = Entity.objects.order_by('start_time')
list_of_lists = [list(g) for t, g in groupby(entities, key=extract_date)]
👤nosklo

10👍

I agree with the answer:

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

But there is another point that:
the arguments of date() cannot use the double underline combine foreign_key field,
you have to use the table_name.field_name

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

and product is the table_name

Also, you can use “print result.query” to see the SQL in CMD.

👤Lee

Leave a comment