1. ホーム
  2. ジャンゴ

[解決済み】Django Southでの後方移行について

2022-04-07 08:51:58

質問

これは本当に馬鹿げた質問だと思いますし、どこかで何かを見逃しているかもしれません。

DjangoでSouthを使ってバックワードマイグレーションを行うにはどうすればよいですか?

そこで、モデルをいじり、マイグレーションを作成し schemamigration で、マイグレーションを実行します。 migrate そして今、それは私が望んでいたものとは全く違うことに気づき、以前のように戻したいと思っています。

データベーステーブルを手動で編集し、移行ファイルを削除する以外に、どのように移行をロールバックすればよいでしょうか。GoogleでSouthを使用したバックワードマイグレーションへの言及を見つけることができますが、そのための確かなコード例はまだ見つかっていません。

どなたか教えてください。

解決方法は?

マイグレーション数を把握する必要がある 直前 ロールバックしたいもの

アプリにはmigrationsディレクトリがあり、その中に以下のような名前のファイルがあるはずです。

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

Southはデータベースを見て、すでに0003を実行していることに気づき、0002に戻るために0003の逆移行を実行しなければならないと判断します。