2016-06-06 2 views
0

С момента обновления до django 1.8 У меня возникли проблемы с полями datetime в моих моделях, которые не выполняются правильно.поля datetime не переносятся с django 1.8

Я видел это сообщение несколько раз:

Your models have changes that are not yet reflected in a migration, and so won't be applied. 
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them. 

Я бегу makemigrations и я получаю это:

operations = [ 
    migrations.AlterField(
     model_name='profile', 
     name='date_of_hire', 
     field=models.DateField(default=datetime.date(2016, 6, 5)), 
    ), 
] 

Так я бегу manage.py перенастроить, а затем я получаю:

Your models have changes that are not yet reflected in a migration, and so won't be applied. 
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them. 

Итак, я запускаю make migrations снова, и я получаю новую миграцию, идентичную описанной выше.

вот моя проблема поле:

date_of_hire = models.DateField(default=datetime.date.today()) 

Глядя на миграцию я могу видеть, что дата получения явно устанавливается на фиксированную дату. Так что теперь, если я изменю свое поле к этому:

date_of_hire = models.DateField(auto_now_add=True) 

или это:

date_of_hire = models.DateTimeField(auto_now_add=True) 

Я получаю ошибку ниже при попытке запустить makemigrations или запустить свой сервер:

File "/urls.py", line 13, in <module> 
import profiles.views as profile_views 
File "/profiles/views.py", line 9, in <module> 
from profiles.forms import CompanyProfileForm 
File "/profiles/forms.py", line 19, in <module> 
class ProfileForm(ModelForm): 
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 295, in __new__ 
raise FieldError(message) 
django.core.exceptions.FieldError: Unknown field(s) (date_of_hire) specified for Profile 

If Я комментирую это поле в полях forms.py, перечисляя все, кроме формы для формы. Я могу выполнять миграции и применять их, запускать сервер и т. Д., Но как только я раскомментирую это поле, приложение дерьмо. Так что я в недоумении ...

ответ

0

В вашем default, вы должны пройти вызываемую datetime.date.today, вместо того, чтобы называть его:

date_of_hire = models.DateField(default=datetime.date.today) 

При использовании default=datetime.date.today(), Django вызывает today() каждый раз, когда вы загрузите models.py , Это изменяет значение по умолчанию, поэтому Django считает, что требуется новая миграция.

Вам нужно будет создать еще одну миграцию, чтобы изменить значение по умолчанию на datetime.date.today (или изменить существующие миграции, но это будет сложнее).

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