Как отфильтровать datetime по дням в django с учетом часового пояса utc?

Объекты времени, которые я пытаюсь отфильтровать, имеют в базе данных значение 2024-10-26 00:49:34.131805, что соответствует 9 часам вечера в моей стране. Когда я пытаюсь отфильтровать по дням (created_at__day=timezone.now().day), возвращается 26-й день, что нормально, но Django переводит их в правильный часовой пояс (9 часов вечера предыдущего дня) при фильтрации и в итоге значения не совпадают.

Что мне нужно сделать?

settings.py

TIME_ZONE = 'America/Sao_Paulo'

USE_I18N = True

USE_TZ = True

models.py

created_at = models.DateTimeField(auto_now_add=True)

query

day = timezone.now().day
filter = Model.objects.filter(created_at__day=day)

вот что я пробовал

date = timezone.now()
filter = Model.objects.filter(created_at__date=date)

и это сработало... но я действительно хотел фильтровать только по дням. Есть ли в Django такая возможность или я что-то делаю не так?

Вы можете отфильтровать по диапазону и установить start и end время суток:

from datetime import timedelta
from django.utils import timezone

now = timezone.localtime(timezone.now())

start = now.replace(hour=0, minute=0, second=0, microsecond=0)
end = start_of_day + timedelta(days=1)

result = Model.objects.filter(
    created_at__gte=start,
    created_at__lt=end,
)

Обратите внимание на то, чтобы не использовать filter в качестве переменной, потому что это встроенная функция Python.

Вернуться на верх