2016-06-06 23 views
0

Seit dem Upgrade auf django 1.8 habe ich einige Probleme mit Datumszeitfeldern in meinen Modellen, die nicht korrekt migriert werden.datetime fields migriert nicht mit django 1.8

ich diese Meldung wiederholt sah:

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. 

Ich betreibe makemigrations und ich bekomme diese:

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

So betreibe ich manage.py Migrate und ich bekomme dann:

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. 

Also mache ich Migrationen erneut und ich bekomme eine neue Migration identisch mit der oben genannten.

hier ist mein Problem Feld:

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

bei der Migration der Suche ich sehen kann, dass das Datum explizit zu einem festen Termine gesetzt zu werden. So, jetzt, wenn ich mein Feld dies zu ändern:

date_of_hire = models.DateField(auto_now_add=True) 

oder dies:

date_of_hire = models.DateTimeField(auto_now_add=True) 

ich den Fehler unten, wenn sie versuchen makemigrations oder starten Sie meinen Server ausführen:

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 

Wenn Ich kommentiere dieses Feld in den forms.py-Feldern aus, listet alles außer dem für das Formular auf. Ich kann Migrationen vornehmen und sie anwenden, den Server laufen lassen, usw., aber sobald ich das Feld auschecke, macht die App einen Mist. Also ich ratlos bin ...

Antwort

0

In Ihrem default, sollten Sie die aufrufbare datetime.date.today passieren, anstatt sie zu nennen:

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

Wenn Sie default=datetime.date.today() verwenden, ruft Django today() jedes Mal, wenn Sie laden Ihre models.py . Dadurch wird der Standardwert geändert, sodass Django eine neue Migration für erforderlich hält.

Sie müssen eine weitere Migration erstellen, um den Standardwert auf datetime.date.today zu ändern (oder bearbeiten Sie die vorhandenen Migrationen, aber das wird schwieriger).