web-dev-qa-db-ja.com

Django Southを使用した後方移行

わかりましたので、これは尋ねるのは本当にばかげたことのように思えます、そして私はどこかに何かを見逃していると確信しています。

DjangoでSouthを使用して後方移行を実行するにはどうすればよいですか?

だから、モデルを微調整し、schemamigrationで移行を作成し、migrateで移行を実行しましたが、今ではそれが私が望んでいたものではなく、以前の方法に戻したいと思います。

Dbテーブルを手動で編集して移行ファイルを削除する以外に、移行をロールバックするにはどうすればよいですか? Google経由でSouthを使用した後方移行への参照を見つけましたが、そのための堅実なコード例をまだ見つけていません。

誰でも助けることができますか?

216
Ruiwen

移行の数を把握する必要があります直前ロールバックする数。

アプリには、次のような名前のファイルが含まれた移行ディレクトリが必要です

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

通常、./manage.py migrate your_appを実行すると、Southはすべての新しい移行を順番に実行します。 (データベーステーブルを見て、どのテーブルが「新しい」かを判断します)。

ただし、番号で移行を指定することもできます。Southはデータベースを前方または後方に移行して、その時点までデータベースを移行します。そのため、上記のサンプルファイルでは、既に0003まで移行しており、0003を逆に実行する(事実上、元に戻す)場合は、次を実行します。

./manage.py migrate your_app 0002

サウスはデータベースを見て、すでに0003を実行していることを認識し、0002に戻るために0003の逆移行を実行する必要があると判断します。

335
Ian Clelland

(私のような)誰かが初期(0001)から移行する方法について疑問に思った場合に備えて:

Django-admin.py migrate some_app zero

出力:

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

「ゼロ」は、移行前の特別な状態です。

リファレンス: http://south.aeracode.org/docs/commands.html

217
Ctrl-C

パラメーターの最後に移行名を追加します。

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