Django Rest Framework - дататайм, отправленный как str, изменяется на другой часовой пояс при сохранении в базу данных?

Я отправил следующее:

{'ticker': 'XYZ', 'last_price': 394.05, 'last_date_time': '2022-10-04 15:57:18'}

Когда он был сохранен в БД:

ticker: XYZ
last_price: 394.05
last_date_time: 2022-10-04 11:57:18

Я не уверен, как или почему это изменяется.

models.py

class StockPriceModel(models.Model):
    ticker = models.CharField(max_length=30, blank=False, db_index=True)
    last_price = models.FloatField(blank=True, null=True)
    last_date_time = models.DateTimeField(db_index=True)
    created_at = models.DateTimeField(auto_now_add=True)

Поле auto_now_add также показывает неправильное время.

Это не соответствует моему времени даты, установленному в настройках следующим образом:

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Dubai'
USE_I18N = True
USE_L10N = True
USE_TZ = True

Django хранит datetime в часовом поясе UTC. Подробности смотрите в этом doc. Поскольку вы указали 'Asia/Dubai' в качестве часового пояса по умолчанию. Django рассматривает полученное значение как время 'Asia/Dubai' и конвертирует его в UTC перед сохранением. Если вам нужно изменить эту логику, попробуйте использовать аргумент default_timezone в поле DateTimeField в сериализаторе:

class MySerializer:
    last_date_time = DateTimeField(default_timezone=pytz.utc)
Вернуться на верх