2015-04-09 3 views
18

У Django 1.8 теперь есть проблемы с обнаружением проблем для моделей, что приятно. Однако, за одно предупреждение, которое он мне дает, я понимаю проблему, но я не понимаю, как подсказка, которую она мне дает, лучше.«Исправлено заданное значение по умолчанию» после обновления до Django 1.8

Это мой (плохо) модель поля:

my_date = DateField(default=datetime.now()) 

, и это легко понять, почему это плохо. Но это намек, который он мне дает:

MyMoel.my_date: (fields.W161) Исправлено заданное значение по умолчанию.
        СОВЕТ: Кажется, вы установили фиксированное значение даты/времени/даты и времени для этого поля. Возможно, это не то, что вы хотите. Если вы хотите иметь текущую дату по умолчанию, используйте `django.utils.timezone.now`

Так, он говорит, чтобы использовать timezone.now, но как же это лучше, чем datetime.now? Они оба значения «по умолчанию» фиксированной ... timezone.now только возвращает Задан экземпляр, который представляет собой фиксированное значение ...

я подозреваю, что он на самом деле хочет, чтобы я, чтобы вставить какой-то флаг, который говорит "использовать timezone.nowпозже". Но это не то, о чем говорится в подсказке ... так что это за флаг?

ответ

48

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

Вместо этого вы должны передать вызываемую функцию default, которая выполняется каждый раз, когда экземпляру модели требуется значение по умолчанию. Подсказка хочет сообщить, что вы должны буквально использовать DateField(default=django.utils.timezone.now) без круглых скобок.

Сообщение немного вводит в заблуждение, но Django не знает, использовали ли вы datetime.now() или django.utils.timezone.now().

+0

Таким образом, при условии, что любой вызывающий может сделать валидатор счастливым (т. Е. Я могу передать его либо 'datetime.now', либо' timezone.now', или что-нибудь, что является функцией, которая возвращает дату)? – Troy

+0

Да, любой из них должен сделать валидатор (и в конечном итоге, вы) счастливым. – knbk

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

  • Нет связанных вопросов^_^