Почему мой запрос в Django ORM с наивными временными интервалами возвращает те же результаты, что и запрос в PostgreSQL с временными интервалами, учитывающими временные зоны?

Я использую Django для фильтрации резерваций на основе диапазона дат с наивными сроками. Мой запрос к Django ORM выглядит так:

start_d_date_naive = "2024-11-3 00:00"
end_d_date_naive = "2024-11-3 23:59"
reserve_naive = Reservations.objects.filter(
    updated_at__range=(start_d_date_naive, end_d_date_naive), status="canceled"
)

Это переводится в следующий SQL-запрос:

SELECT * FROM "consultant_reservations"
WHERE "consultant_reservations"."status" = 'canceled'
AND "consultant_reservations"."updated_at" BETWEEN '2024-11-03 00:00:00' AND '2024-11-03 23:59:00'

Однако результаты получились такими же, как если бы я выполнил этот запрос непосредственно в PostgreSQL:

SELECT * FROM "consultant_reservations"
WHERE updated_at BETWEEN '2024-11-03 00:00:00+03:30' AND '2024-11-03 23:59:00+03:30'
AND status='canceled';

Почему запрос в Django ORM с наивными временными интервалами возвращает те же результаты, что и запрос в PostgreSQL с временными интервалами, учитывающими временные зоны?


settings.py содержит:

TIME_ZONE = 'Asia/Tehran'

USE_TZ = False

Тестирование в оболочке Django:

In [14]: from django.conf import settings

In [15]: print(settings.TIME_ZONE)
Asia/Tehran

Сервер PostgreSQL:

=> SHOW timezone;
 TimeZone 
----------
 Etc/UTC
(1 row)

Попытка , USE_TZ = True

Если мы используем , USE_TZ = False, django не будет применять часовые пояса. Здесь вы используете USE_TZ = False и устанавливаете часовой пояс как 'Asia/Tehran'

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