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 учитывал временную зону, только если есть доли времени, и сохранялся наивным, как есть, и переводился пользователю, как есть, если нет долей времени. Как я могу этого добиться?

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