Как отфильтровать 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.