Ненормальность Datetime.now () - Python - PullRequest
5 голосов
/ 23 июня 2010

Я работаю с приложением Python через Django . В приложении я храню классическое поле " созданный " в нескольких таблицах.

Вот так выглядит поле в форме Джанго:

created = models.DateTimeField(blank=True, default=datetime.now())

К сожалению, datetime.now () не точен. На самом деле в базе данных у меня есть наборы строк с одинаковой отметкой времени.

Значение datetime.now () меняется каждые 30-45 минут.


Мое приложение Django обслуживается в Windows Server 2005 за IIS6.

Помощь была бы потрясающей!

Ответы [ 3 ]

10 голосов
/ 23 июня 2010

К сожалению, это распространенная ошибка новичка.В определении вызывается метод datetime.now() - это означает, что значением по умолчанию будет время выполнения определения, т. Е. Когда запускается серверный процесс.

Вам необходимовместо вызывается :

created = models.DateTimeField(blank=True, default=datetime.now)

т.е. без скобок вызова.

(Или просто используйте auto_now_add=True).

6 голосов
/ 23 июня 2010

потому что datetime.now () вызывается при инициализации вашего модуля и это значение используется по умолчанию.

Вы хотите использовать auto_now_add = True параметр

created = models.DateTimeField(auto_now_add=True)

edit: не нужно указывать пустое значение, если вы устанавливаете опцию auto.

2 голосов
/ 23 июня 2010

Для полей auto_now или auto_now_add не установлено значение True.Следовательно, значение по умолчанию - это то, что заполнено в форме.Когда форма отправляется в браузер.Конечно, будут дубликаты.

http://docs.djangoproject.com/en/1.2/ref/models/fields/#datetimefield

...