Чтение полей времени даты как UTC в Django
В настройках моего приложения поддержка часовых поясов активна USE_TZ = True
Итак, все мои DateTimeField
в моих моделях преобразуются из моего местного часового пояса в UTC
перед сохранением в базе данных.
Вопрос:
В некоторых случаях пользователь вводит значение поля datetime только с точностью до дня, например 2022-10-24
без временной части, и я уже принимаю этот формат в качестве входных данных. Но в таком случае я хочу сохранить это значение без временной зоны, чтобы позже оно было разобрано без временной зоны.
Почему это вызывает проблему?
Если пользователь вводит значение 2022-10-24
и его локальный часовой пояс равен UTC+2
, оно будет сохранено в базе данных как 2022-10-23 22:00:00 UTC
. Когда другой пользователь откроет тот же экземпляр и его локальный часовой пояс будет UTC+1
, он увидит значение как 2022-10-23 23:00:00
, в то время как я хочу, чтобы он увидел его с тем же значением, которое ввел первоначальный пользователь, поэтому оно должно быть 2022-10-24 00:00:00
.
Частично проваленный суд:
Я пытался справиться с этим в своем ModelForm
, разбирая введенный формат, затем заменяя информацию о часовом поясе на UTC
, если она с точностью до дня.
from pytz import UTC
datetime_value = datetime_value.astimezone().replace(tzinfo=UTC)
Теперь значение сохраняется в базе данных как 2022-10-24 00:00:00 UTC
. Но когда я читаю значение этого поля, оно будет разобрано как 2022-10-24 02:00:00
, поскольку мой локальный часовой пояс UTC+2
, однако я хочу, чтобы оно читалось как UTC.
Как я могу переопределить поведение чтения поля datetime, чтобы оно отображалось как UTC?