проблема с датами с учетом часового пояса в django rest framework с postgresql - PullRequest
0 голосов
/ 17 июня 2020

Я использую Django rest framework с Postgresql. Из документов Django я понял, что Postgres будет хранить DateTime только в UT C, а Django преобразует его обратно в местное время при отображении в шаблонах. Однако я не использую шаблоны. Я использую DRF для создания API, которые используются приложением Vue. У меня два вопроса:

  1. Почему поля Django Model DateTime преобразуются в столбец типа «отметка времени с часовым поясом», если значения всегда хранятся в UT C?
  2. Как для возврата значений DateTime по местному времени из структуры Django rest.

Вот мой файл настроек -

TIME_ZONE = 'Asia/Calcutta'

USE_TZ = True

REST_FRAMEWORK = {
    'DATE_INPUT_FORMATS': ["%d-%m-%Y",],
    'DATE_FORMAT': "%d-%m-%Y",
    'DATETIME_FORMAT': "%d-%m-%Y %H:%M:%S",
}

Специальное примечание - с использованием django .utils.timezone .localtime (timezone.now ()) создает значение в локальном времени, но оно преобразуется обратно в UT C при сохранении в БД.

Любая помощь будет принята с благодарностью. Большое спасибо за ваше время и помощь.

1 Ответ

0 голосов
/ 17 июня 2020

Чтобы ответить на оба ваших вопроса:

  1. Это стандартный подход для временных меток, поддерживающих TZ. Из документов :

    Это удобно, если ваши пользователи живут в более чем одном часовом поясе и вы хотите отображать информацию о дате и времени в соответствии с настенными часами каждого пользователя.

    Если сохранено как UT C, метка времени может быть преобразована в любое представление местного времени, если у нас есть часовой пояс пользователя (или значение по умолчанию TIME_ZONE).

  2. Django Rest Framework будет использовать настройки, определенные для приложения. docs для DateTimeField состояния:

    default_timezone - pytz.timezone, представляющий часовой пояс. Если не указан и параметр USE_TZ включен, по умолчанию используется текущий часовой пояс. Если USE_TZ отключен, то объекты datetime будут наивными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...