2016-06-06 1 views
0

Depuis la mise à niveau vers django 1.8 J'ai rencontré des problèmes avec les champs datetime de mes modèles qui ne migrent pas correctement.Les champs datetime ne migrent pas avec django 1.8

je voyais ce message à plusieurs reprises:

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. 

je lance makemigrations et je reçois ceci:

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

Alors je cours migrate manage.py puis-je obtenir:

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. 

Je lance donc de nouveau les migrations et j'obtiens une nouvelle migration identique à celle ci-dessus.

voici mon champ de problème:

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

En regardant la migration, je peux voir que la date est définie de manière explicite à obtenir une date fixe. Alors maintenant, si je change mon champ à ceci:

date_of_hire = models.DateField(auto_now_add=True) 

ou ceci:

date_of_hire = models.DateTimeField(auto_now_add=True) 

Je reçois l'erreur ci-dessous lorsque vous essayez d'exécuter makemigrations ou démarrer mon serveur:

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 

Si Je commente ce champ dans les champs de formulaires.py liste tout sauf le pour le travail de formulaire. Je peux faire des migrations et les appliquer, lancer le serveur, etcetera, mais dès que je décommente ce champ l'application prend une merde. Je suis donc à une perte ...

Répondre

0

Dans votre default, vous devriez passer le appelable datetime.date.today, au lieu de l'appeler:

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

Lorsque vous utilisez default=datetime.date.today(), Django appelle today() chaque fois que vous chargez votre models.py . Cela change la valeur par défaut, donc Django pense qu'une nouvelle migration est nécessaire.

Vous devrez créer une autre migration pour changer la valeur par défaut en datetime.date.today (ou modifier les migrations existantes mais cela sera plus compliqué).