Я не уверен, может ли Django ORM выполнять преобразование даты и времени в даты в середине запроса. Однако вы можете сначала выполнить запрос, получить результаты, а затем использовать функцию Python groupby()
для сортировки возвращаемых строк. Вот небольшой пример группировки даты и времени по дате:
from pprint import pprint
from datetime import datetime
from itertools import groupby
rows = [('Frodo party', datetime(3018, 9, 22, 10, 38)),
('Nazgul defeat Rangers', datetime(3018, 9, 22, 11, 57)),
('Frodo finishes packing', datetime(3018, 9, 23, 10, 59)),
('Gandalf tames Shadowfax', datetime(3018, 9, 23, 13, 11)),
('Gandalf crosses the Isen', datetime(3018, 9, 24, 18, 46))]
for key, values in groupby(rows, key=lambda row: row[1].date()):
print('-')
pprint(key)
pprint(list(values))
Как видите, вы должны предоставить groupby()
функцию key
, которая берет один из объектов, которые она группирует, и извлекает значение, по которому должна происходить группировка — в этом случае она захватывает второй элемент в каждой строке с помощью [1]
. а затем вызывает метод Python datetime
date()
для извлечения части даты без часов и минут. Вывод скрипта выглядит следующим образом (функция pprint()
— это просто причудливый оператор «print», который делает отступ в выводе, он не понадобится в вашем коде Django!):
-
datetime.date(3018, 9, 22)
[('Frodo party', datetime.datetime(3018, 9, 22, 10, 38)),
('Nazgul defeat Rangers', datetime.datetime(3018, 9, 22, 11, 57))]
-
datetime.date(3018, 9, 23)
[('Frodo finishes packing', datetime.datetime(3018, 9, 23, 10, 59)),
('Gandalf tames Shadowfax', datetime.datetime(3018, 9, 23, 13, 11))]
-
datetime.date(3018, 9, 24)
[('Gandalf crosses the Isen', datetime.datetime(3018, 9, 24, 18, 46))]
person
Brandon Rhodes
schedule
10.03.2011