Django ORM группировка по усеченному значению поля
Прошу помощи:
Имеется таблица в базе данных
date book news
2021-11-28 10:35:00 11 33
2021-11-28 11:35:00 22 33
2021-11-28 12:35:00 5 6
2021-11-29 13:35:00 67 1
2021-11-29 14:35:00 55 12
Поле date - CharField
Неоходимо чтобы была группировка по дате без времени, т.е 2021-11-28 и максимальное число по столбцу book и news за это число. В итоге необходимо, чтобы в шаблон отправлялся объект:
[{'date': '2021-11-28', 'max_book': '22', 'max_news': '33'},
{'date': '2021-11-29', 'max_book': '67', 'max_news': '12'}]
Написал класс:
class test(ListView):
model = UseTest
template_name = 'test/use_test.html'
context_object_name = 'usetest'
paginate_by = 4
result = (UseTest.objects
.values('date')
.annotate(max_book=Max('book'), max_news =('news'))
.order_by('-pk')
)
...
Если я правильно понимаю мы сначала берем значение по полю values('date') для группировки, но надо как-то его сделать усеченным (аналог SELECT LEFT (date, 10) as date) Так же предполагаю, что для начала надо сделать annotate чтобы появилось новое усеченное поле, потом values по новому полю и далее еще раз annotate(max_book=Max('book'), max_news =('news'))
пробовал (F('date')[:10]), но не работает.
Или это делается другими способами, например:
usetest = UseTest.objects.all()
list_usetest = []
for item in usetest:
date = item.usetest[0:10]
list_useagentccs.append({'date': date, 'book': item.book, 'news': item.news })
А далее уже как-то искать в списке list_usetest максимальные значение book и news и потом этот объект отправлять в шаблон