2014-12-02 3 views
0

У меня есть приложение Django, которое автоматически принимает значение timezone.now() как поле в модели. Когда я запускаю его на localhost, он работает так, как ожидалось. Однако, когда я развернул его в Digital Ocean, timezone.now() принимает значение времени, когда я начал запускать сервер. Почему это происходит и как я могу обойти это?datetime.now() неточно

Исправление: timezone.now Джанго()

ответ

1

Я считаю, что это потому, что это кэширование результат выполнения этого метода, вместо того, чтобы запустить его снова каждый раз, когда это называется, как я столкнулся с этим в Рубине на Rails. В вашей локальной среде кеширование, вероятно, не включено, поскольку это будет раздражать разработку. В Ruby вы можете просто обернуть вызов метода в лямбда, который, как я полагаю, также будет работать на Python, но я не пробовал.

4

Код был бы полезным.

Предположительно вы используете это как аргумент default для поля. Проблема заключается в том, что вы сделали это:

my_field = models.DateField(default=datetime.datetime.now()) 

, который, благодаря работам Python образом, оценивается, когда класс определяется - то есть, когда начинается процесс. Вместо этого, вы должны пройти вызываемая:

my_field = models.DateField(default=datetime.datetime.now) 

, то есть без призывающих скобок и Django будет знать, называть его конкретизации.

+0

Я посмотрю на это, но почему запуск сервера на моем локальном компьютере не создает проблему, но удаленный сервер делает это? – Contechtions

+0

Ну, да, но на вашем локальном компьютере вы все время перезапускаете сервер dev - он перезапускается всякий раз, когда изменяется ваш код. Если вы оставите свой сервер-разработчик более суток, без изменений кода, вы увидите то же самое. –

+0

Хороший ответ. Вот почему я предпочитаю использовать параметр auto_now_add: created_at = models.DateTimeField (auto_now_add = True) –

Смежные вопросы