Django - Гибкая точность поля DateTimeField с учетом часового пояса
Подробности реализации:
У меня есть модель базы данных, которая включает DateTimeField
как показано ниже:
class Person(models.Model):
....
date_of_birth = models.DateTimeField()
date_of_birth_precision = models.CharField(max_length=3, choices=(
('D', 'Day'),
('H', 'Hour'),
('Min', 'Minute'),
('S', 'Second')
))
У меня USE_TZ = True
в моем settings.py
.
Мой отступ сделан для того, чтобы дать пользователю возможность вводить date_of_birth
с той точностью, которую он хочет, в соответствии с выбранной date_of_birth_precision
, а формат пикера я уже обработал в соответствии с выбранной date_of_birth_precision
. Так, например, ввод может быть 1992-07-28
, 1992-07-28 15
, 1992-07-28 15:33
или 1992-07-28 15:33:45
в зависимости от выбранной точности.
Чтобы иметь возможность принимать эти различные форматы в моей форме, я расширил принятые форматы в settings.py
следующим образом:
DATETIME_INPUT_FORMATS += (
"%Y-%m-%d %H",
)
Заявление о проблеме:
Пока что все работает нормально, только если у меня есть доли времени.
Предположим, что входная дата 1992-07-28
с точностью Day
и мой локальный часовой пояс UTC+2
, значение будет преобразовано в UTC, чтобы быть 1992-07-27 22:00:00
в базе данных.
Теперь, когда пользователь, например, с часовым поясом UTC+1
читает date_of_birth
, он будет сначала переведен из базы данных в 1992-07-27 23:00:00
, затем я буду разбирать его для пользователя с точностью Day
, чтобы было 1992-07-27
, что не является правильным в моем бизнес случае.
В моем бизнес-кейсе я хочу, чтобы date_of_birth
учитывал временную зону, только если есть доли времени, и сохранялся наивным, как есть, и переводился пользователю, как есть, если нет долей времени. Как я могу этого добиться?