2015-07-12 3 views
8

Zuerst frage ich nach Django Migration in 1.7, nicht south eingeführt.Wie kann ich eine Migration mit Django Migrationsbefehl überspringen?

Angenommen, ich habe Migrationen 001_add_field_x, 002_add_field_y, und beide werden auf die Datenbank angewendet. Jetzt ändere ich meine Meinung und entscheide mich, die zweite Migration rückgängig zu machen und sie durch eine andere Migration 003_add_field_z zu ersetzen.

Mit anderen Worten, ich möchte 001 und 003 anwenden, überspringen 002, wie kann ich das tun?

P.S. Ich weiß, dass ich rückwärts zu 001 migrieren kann, aber nachdem ich die 003-Migration gemacht und den migrate-Befehl ausgeführt habe, werden 001 bis 003 alle angewendet, oder?

Antwort

23

Sie können die Option --fake verwenden.

Sobald Sie 0001 zurückkehren können Sie

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

laufen und dann laufen

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

die nur 0003 in diesem Fall gelten würde.

Wenn Sie nicht über diesen Vorgang für alle Umwelt/andere Entwickler folgen möchten, können Sie einfach die Migration von Dateien entfernen, und führen Sie einen neuen makemigration, und diese Datei begehen - und ja, laufen migrate mit der --fake Option

python manage.py migrate --fake 

spart nur ein bisschen Typisierung:

2

zu diesem speziellen Fall nicht anwendbar, aber wenn man braucht, will oder all unangewendet Migrationen zu überspringen, kann diese verwendet werden.

Verwandte Themen