Django default = timezone.now() сохраняет записи, используя "старое" время
Эта проблема возникает и отключается в течение нескольких недель, и это в отличие от любого, что придумало мой проект.
Две из используемых моделей имеют поле timestamp, которое по умолчанию установлено в timezone.now()
.
Это последовательность, которая вызывает флаги ошибок:
-
Модель первая создана в 19:30
-
Модель 2 создается в момент времени 10:00 PM, но в базе данных MySQL она хранится как 7:30 вечера!
Каждая созданная модель имеет отметку времени, сохраненную в 7:30 вечера, а не фактическое время, пока не пройдет определенная продолжительность. Затем устанавливается новое время, и у всех следующих моделей есть новое время... Bizzare
Дополнительные сведения, которые могут помочь в обнаружении проблемы:
У меня есть куча методов, которые я использую, чтобы tzinfo
временные tzinfo
их tzinfo
и заменить их на UTC.
Это связано с тем, что я делаю расчет timezone.now() - creationTime
чтобы создать в проекте такую "модель, опубликованную давно". Однако это действительно не должно быть причиной проблемы.
Я не думаю, что использование datetime.datetime.now()
будет иметь значение.
В любом случае спасибо за помощь!
Ответы
Ответ 1
Просто наткнулся на эту последнюю неделю для поля, у которого был default=date.today()
. Если вы удалите круглые скобки (в этом случае попробуйте по default=timezone.now
), то вы передаете вызываемую модель, и она будет вызываться каждый раз, когда будет сохранен новый экземпляр. С круглыми скобками он models.py
только один раз при models.py
.
Ответ 2
Просто установите параметр auto_now_add
следующим образом.
timestamp = models.DateTimeField(auto_now_add=True)
Обновить:
Пожалуйста, не используйте auto_now_add
. Это не рекомендуется, вместо этого сделайте следующее:
from django.utils import timezone
timestamp = models.DateTimeField(default=timezone.now)