Группа моделей Django по дате и времени - PullRequest
8 голосов
/ 02 августа 2010

Предположим, у меня есть такая модель:

class Entity(models.Model):
    start_time = models.DateTimeField()

Я хочу перегруппировать их в список списков , каждый список которых содержит объекты с той же даты (того же дня, времениследует игнорировать).

Как это может быть достигнуто питоническим способом?

Спасибо

Ответы [ 2 ]

14 голосов
/ 02 августа 2010

Создайте небольшую функцию для извлечения только даты:

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

Затем вы можете использовать ее с 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))

Или, еслиВы действительно хотите список списков:

entities = Entity.objects.order_by('start_time')
list_of_lists = [list(g) for t, g in groupby(entities, key=extract_date)]
8 голосов
/ 11 августа 2015

Я согласен с ответом:

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

Но есть еще один момент, который: аргументы date () не могут использовать поле foreign_key с двойным подчеркиванием, Вы должны использовать table_name.field_name

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

и product_name таблицы

Кроме того, вы можете использовать «print result.query» для просмотра SQL в CMD.

...