Backwards migration with Django South

Ok, więc to wydaje się być naprawdę głupie pytanie, i jestem pewien, że coś mi gdzieś umyka.

Jak wykonać migrację wstecz używając South Na Django?

Więc poprawiłem moje modele, stworzyłem migrację z schemamigration, przeprowadziłem migrację z migrate, i teraz zdałem sobie sprawę, że nie do końca tego chciałem i chcę go z powrotem.

Pomijając ręczną edycję tabel db i usuwanie plików migracji, jak mam cofnąć migrację? I znajdź odniesienia do wstecznych migracji za pomocą South za pośrednictwem Google, ale jeszcze nie znaleźć solidnego przykładu kodu dla niego.

Czy ktoś może pomóc?
Author: murgatroid99, 2011-04-28

3 answers

Musisz ustalić numer migracji tuż przed tą, którą chcesz cofnąć.

Twoja aplikacja powinna mieć katalog migracji, w którym znajdują się pliki o nazwie

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

Normalnie, gdy uruchomisz ./manage.py migrate your_app, South uruchamia wszystkie nowe migracje, w kolejności. (Patrzy na tabele bazy danych, aby zdecydować, które z nich są 'nowe').

Możesz jednak również określić dowolną migrację według numeru, A South przeniesie Twoją bazę danych, do przodu lub do tyłu, do do tego momentu. Tak więc, z przykładowymi plikami powyżej, jeśli już migrujesz do 0003 i chcesz uruchomić 0003 w odwrotnej kolejności (cofając ją, skutecznie), uruchomisz

./manage.py migrate your_app 0002

South spojrzy na bazę danych, zdając sobie sprawę, że uruchomiła już 0003 i stwierdzi, że musi uruchomić odwrotną migrację dla 0003, aby wrócić do 0002.

 331
Author: Ian Clelland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 06:35:51

Na wypadek, gdyby ktoś (jak ja) zastanawiał się, jak wrócić z początkowego (0001):

django-admin.py migrate some_app zero

Wyjście:

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

"zero" jest specjalnym stanem przed jakąkolwiek migracją.

Numer referencyjny: http://south.aeracode.org/docs/commands.html

 216
Author: Ctrl-C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-06 19:00:27

Dodaj nazwę migracji na końcu parametrów:

./manage.py migrate app-name 00xx-migration-name
 3
Author: Jerzyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 06:10:53