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)