Группа моделей Django по дате даты
Предположим, что у меня есть такая модель:
class Entity(models.Model):
start_time = models.DateTimeField()
Я хочу перегруппировать их как список списков, которые в каждом списке списков содержат объекты с той же даты (в тот же день, время должно игнорироваться).
Как это может быть достигнуто питоническим способом?
Спасибо
Ответы
Ответ 1
Создайте небольшую функцию для извлечения только даты:
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)]
Ответ 2
Я согласен с ответом:
Product.objects.extra(select={'day': 'date( date_created )'}).values('day') \
.annotate(available=Count('date_created'))
Но есть еще один момент:
аргументы date() не могут использовать двойное подчеркивание comb foreign_key field,
вы должны использовать table_name.field_name
result = Product.objects.extra(select={'day': 'date( product.date_created )'}).values('day') \
.annotate(available=Count('date_created'))
а product - имя_таблицы
Кроме того, вы можете использовать "print result.query", чтобы увидеть SQL в CMD.