Как установить поле Postgres Datetime в поле Odd Datetime

Я пытаюсь отобразить заданное время времени базы данных Postgres для поля datetime в Odoo.

Я создаю поле, чтобы установить время.

last_modify_article = fields.Datetime("Last Modify Date")

Но мой DateTime: ~ 2017-08-28T08: 43: 56 + 0200 отлично хранится в базе данных Postgres, но в Odoo видел в разных.

Итак, мой вопрос заключается в том, как я могу управлять датой даты базы данных в поле.

Вот время Postgres

И

Здесь поле Odoo устанавливает дату и время в UTC

Ответ 1

Odoo предназначен для хранения даты и времени в формате UTC в базе данных и преобразования его в пользовательский часовой пояс на интерфейсе.

Какой часовой пояс установлен для вашего пользователя? Вы можете щелкнуть свое имя в правом верхнем углу, а затем в настройках. Часовой пояс должен отображаться во всплывающей форме.

Ответ 2

Фактически база данных хранит поле datetime в соответствии с системным часовым поясом. в одинарных представлениях, которые будут автоматически преобразованы в соответствии с часовым поясом пользователей, если они установлены. На ваших изображениях я вижу разницу во времени id +5: 30, т.е. Часовой пояс Asia/Kolakata. поэтому ваши пользовательские операции в поле datetime нуждаются в правильном преобразовании часового пояса в соответствии с пользователем. Представления Odoo и методы orm обрабатываются tz с моментами .js и преобразования pytz. Это действительно хорошая функция для управления разными часовыми поясами в оду. Вы можете использовать astimezone для объекта datetime:

    def astimezone(self, tz): # known case of datetime.datetime.astimezone
    """ tz -> convert to local time in new timezone tz """
    return datetime(1, 1, 1)

или

fields.Datetime.context_timestamp(self, datetime.strptime(value, DEFAULT_SERVER_DATETIME_FORMAT))