216 votes

Migration vers l'arrière avec Django South

Ok, cela semble être une question vraiment stupide, et je suis sûr que j'ai manqué quelque chose quelque part.

Comment effectuer une migration ascendante en utilisant South sur Django ?

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

À part modifier manuellement les tables de la base de données et supprimer les fichiers de migration, comment dois-je procéder pour annuler la migration ? Je trouve des références à des migrations en arrière utilisant South via Google, mais je n'ai pas encore trouvé d'exemple de code solide pour cela.

Quelqu'un peut-il m'aider ?

335voto

Ian Clelland Points 15066

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

Votre application devrait avoir un répertoire de migrations, avec des fichiers nommés comme suit

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 Le Sud exécute toutes les nouvelles migrations, dans l'ordre. (Il consulte les tables de la base de données pour déterminer lesquelles sont "nouvelles").

Cependant, vous pouvez également spécifier n'importe quelle migration par un numéro, et South migrera votre base de données, soit en avant, soit en arrière pour l'amener à ce point. Ainsi, avec les fichiers d'exemple ci-dessus, si vous avez déjà migré jusqu'à 0003, et que vous voulez exécuter 0003 en sens inverse (en l'annulant, en fait), vous devez exécuter

./manage.py migrate your_app 0002

South regarde la base de données, se rend compte qu'il a déjà exécuté 0003, et détermine qu'il doit exécuter la migration inverse pour 0003 afin de revenir à 0002.

217voto

Kern3l Points 1977

Juste au cas où quelqu'un (comme moi) se demanderait comment migrer en arrière à partir de l'initial (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

3voto

Jerzyk Points 1744

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X