2016-05-01 1 views
2

Alors d'abord j'ai couru makemigrations puis j'ai couru migrate et obtenu l'erreur ValueError: The database backend does not accept 0 as a value for AutoField.Comment refaire des makemigrations après une erreur?

Alors je suis allé de l'avant, modifié mon models.py pour corriger cette erreur.

Maintenant, lorsque je lance makemigrations pour recommencer, cela fonctionne. Ensuite, migrate n'a pas fait quoi que ce soit, mais montre à nouveau l'erreur. Il y a donc une migration qui est mauvaise, puis il y en a une après qui est correcte.

J'ai donc essayé d'exécuter ./manage.py migrate --fake mainapp zero après l'avoir lu sur Stack Overflow et maintenant il est dit django.db.utils.OperationalError: (1050, "Table 'mainapp_article' already exists").

Des idées comment je peux revenir à l'endroit où j'ai commencé, et réessayer les makemigrations maintenant avec l'erreur supprimée de models.py?

Répondre

7

1) Identifier votre dernière migration de succès:

./manage.py showmigrations mainapp 
[X] 0001_initial 
[X] 0002_auto_20160425_0102 
[X] 0003_auto_20160426_2022 
[X] 0004_auto_20160427_0036 

2) Ensuite, utilisez Migrer pour migrer votre base de données à ce point de migration spécifié.

./manage.py migrate mainapp 0003_auto_20160426_2022 

Dans cet exemple, je suppose que la migration 0003 a été un succès alors que la 0004 ne l'était pas.

3) Supprimez le fichier de migration

rm mainapp/migrations/0004_auto_20160427_0036.py* 

4) makemigrations Exécuter et émigrent à nouveau.

+1

Ouch ... L'option 'showmigrations' a été introduite dans django 1.8. https://docs.djangoproject.com/ja/1.9/ref/django-admin/#django-admin-showmigrations – slackmart

+0

Je viens de sauter à Django 1.9. Je vais mettre à jour la question. Je vous remercie! – User

0

Si vous avez une mauvaise migration, vous devez simplement la supprimer et la générer à nouveau.