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)