web-dev-qa-db-fra.com

Migration vers l’arrière avec Django Sud

Ok, donc cela semble être une chose vraiment stupide de demander, et je suis sûr que je manque quelque chose quelque part.

Comment effectuez-vous une migration vers l'arrière en utilisant South sur Django?

J'ai donc peaufiné mes modèles, créé une migration avec schemamigration, lancé la migration avec migrate et maintenant, je réalise que ce n'est pas tout à fait ce que je voulais et que je le veux comme avant.

À part la modification manuelle des tables de la base de données et la suppression des fichiers de migration, comment dois-je procéder pour restaurer la migration? Je trouve des références à des migrations en arrière via South via Google, mais je n’ai pas encore trouvé d’exemple de code solide.

Quelqu'un peut-il aider?

216
Ruiwen

Vous devez déterminer le numéro de la migration juste avant celle que vous souhaitez annuler.

Votre application doit avoir un répertoire de migration, avec des fichiers nommés ainsi:

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py

Normalement, lorsque vous exécutez ./manage.py migrate your_app, South exécute toutes les nouvelles migrations dans l’ordre. (Il examine les tables de la base de données pour déterminer celles qui sont "nouvelles").

Toutefois, vous pouvez également spécifier une migration par numéro et South effectuera la migration de votre base de données, en avant ou en arrière, pour la porter à ce point. Ainsi, avec les exemples de fichiers ci-dessus, si vous avez déjà migré jusqu’à 0003 et que vous souhaitez exécuter 0003 à l’inverse (annulation effective), vous exécuterez

./manage.py migrate your_app 0002

Sud examinerait la base de données, se rendrait compte qu'il avait déjà exécuté 0003 et déterminait qu'il devait exécuter la migration inverse pour 0003 pour pouvoir revenir à 0002.

335
Ian Clelland

Juste au cas où quelqu'un (comme moi) se demanderait comment migrer à partir de l'initiale (0001) :

Django-admin.py migrate some_app zero

sortie:

Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

"zéro" est un état spécial avant toute migration.

Référence: http://south.aeracode.org/docs/commands.html

217
Ctrl-C

Ajoutez un nom de migration à la fin des paramètres:

./manage.py migrate app-name 00xx-migration-name
3
Jerzyk