В queryset сгруппировать по дате, если поле содержит и дату и время?

В Django, чтобы сгруппировать результаты QuerySet по дате, если поле содержит и дату, и время, вы можете использовать функцию TruncDate().

Предположим, у вас есть модель Event, которая содержит поле datetime, хранящее информацию о дате и времени события. Вы хотите сгруппировать все события по дате. Для этого вы можете использовать следующий код:

from django.db.models.functions import TruncDate
from django.db.models import Count

events = Event.objects.annotate(date=TruncDate('datetime')).values('date').annotate(count=Count('id'))

for event in events:
    print(event['date'], event['count'])

В этом коде мы используем функцию TruncDate('datetime'), которая преобразует поле datetime в date, отбрасывая информацию о времени.
Затем мы используем метод values('date'), чтобы указать, что нам нужно только поле date для группировки результатов. Затем мы используем метод annotate(count=Count('id')), чтобы подсчитать количество событий в каждой группе.
Наконец, мы можем получить доступ к сгруппированным результатам, перебирая элементы events и получать дату (event['date']) и количество событий (event['count']).

Таким образом, с использованием функции TruncDate() в Django вы можете сгруппировать результаты QuerySet по дате, если поле содержит и дату, и время. Вы также можете добавить другие агрегатные функции, такие как Sum(), Avg() или Min(), чтобы получить дополнительную информацию о сгруппированных результатах.