web-dev-qa-db-fra.com

Comment ignorer une migration avec la commande Django migrate?

Tout d'abord, je pose des questions sur la migration Django introduite en 1.7, pas sur south.

Supposons que j'ai des migrations 001_add_field_x, 002_add_field_y, et les deux sont appliqués à la base de données. Maintenant, je change d'avis et je décide d'annuler la deuxième migration et de la remplacer par une autre migration 003_add_field_z.

En d'autres termes, je veux appliquer 001 et 003, en sautant 002, comment faire?

P.S. Je sais que je peux migrer vers 001, mais après avoir effectué la migration 003 et exécuté la commande migrate, 001 à 003 seront tous appliqués, non?

22
NeoWang

Vous pouvez utiliser le --fake option.

Une fois que vous revenez à 0001 tu peux courir

python manage.py migrate <app> 0002 --fake

puis exécutez

python manage.py migrate <app> #Optionally specify 0003 explicitly

qui s'appliquerait uniquement 0003 dans ce cas.

Si vous ne souhaitez pas suivre ce processus pour tous les environnements/autres développeurs, vous pouvez simplement supprimer les fichiers de migration, exécuter un nouveau makemigration et valider ce fichier - et oui, exécuter migrate avec le --fake option

47
karthikr

Ne s'applique pas à ce cas spécifique, mais si l'on veut ou doit ignorer toutes les migrations non appliquées, cela peut être utilisé:

python manage.py migrate --fake

Enregistre juste un peu de frappe.

3
Nagev