"Исправлено заданное значение по умолчанию" после перехода на 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
просто возвращает экземпляр datetime, который является фиксированным значением...
Я подозреваю, что он действительно хочет, чтобы я вставлял какой-то флаг, который говорит "использовать timezone.now
позже". Но это не то, что подсказка говорит... так что это за флаг?
Ответы
Ответ 1
В настоящее время функция datetime.now()
выполняется, как только ваш код импортируется, т.е. когда вы заново запускаете свой сервер. Все последующие экземпляры модели будут иметь одинаковое значение.
Вместо этого вы должны передать вызываемую функцию default
, которая выполняется каждый раз, когда экземпляру модели требуется значение по умолчанию. Подсказка хочет сообщить, что вы должны буквально использовать DateField(default=django.utils.timezone.now)
без круглых скобок.
Сообщение немного вводит в заблуждение, но Django не знает, использовали ли вы datetime.now()
или django.utils.timezone.now()
.