Django DateTime Field для создания полей временной метки без часового пояса

StackOverflow https://stackoverflow.com/questions/1869419

Вопрос

Я работаю над приложением Django, где мне нужно, чтобы все Postgres представляли DateTime полей, которые были сохранены в UTC (как и должны). Когда я создаю модели с полями DateTime, они представления базы данных генерируются как »временная метка с часовым поясом«Хотя я могу вручную изменить таблицы, чтобы удалить часовой пояс с полей, мне было интересно, имеет ли поле модели DateTime возможность не делать этого - т.е., создать»временная метка с часовым поясом«Для некоторых полей. Это возможно? Или мне нужно изменить их столы? Спасибо, Харел

Это было полезно?

Решение

Типы данных для Postgres в Django Map в строковой литерал timestamp with time zone, и, похоже, нет возможности изменить этот тип.

Насколько мне известно, у вас есть три варианта:

  1. Воспользуйтесь крюком Джанго для выполнения RAW SQL после оператора CREATE TABLE. Анкет Для этого создать каталог под названием sql В вашем приложении и файле в этом каталоге называется mymodel.postgres_psycopg2.sql. Анкет Поместите там свои операторы альтер -таблицы.

  2. Напишите пользовательское поле, чтобы определить модификаторы для поля временной метки, как вы считаете нужным. Видеть "Написание пользовательских модельных полей".

  3. Оставьте поле Джанго как есть, и выполните преобразование часового пояса в своем приложении, чтобы вы были абсолютно уверены, что проходите правильное время.

Мое личное предпочтение целостности данных - № 3. Как и в случае с кодировками персонажей, где вы всегда хотите быть уверенным, что знаете Charset и правильно обрабатываете преобразования, я чувствую себя гораздо более комфортно с датами/временами, чьи атрибуты (включая TZ) настолько точно определены, насколько это возможно. Сегодня вы можете быть уверены, что весь ваш ввод отправляется в ваше приложение уже в UTC, но это может измениться, в частности, если временные метки поставляются конечными пользователями. Что бы это ни стоило, я бы прошел лишнюю милю, преобразовывал временную метку в приложении в UTC и храню ее в БД с UTC в качестве часового пояса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top