Django のマイグレーションをロールバックする手順

Django で migrate をしたあと、途中からやり直したいときに行う手順を備忘録として残します。

マイグレーション履歴を確認

python manage.py showmigrations でマイグレーションの実行履歴を確認します。

// python manage.py showmigrations <app>
$ python manage.py showmigrations samplesite

samplesite
 [X] 0001_initial
 [X] 0002_add_article
 [X] 0003_fix_article

戻したいところまでロールバックする

python manage.py migrate <app> <file> でロールバックします。

<file> は戻したいファイルのひとつ前のものを指定します。

// python manage.py migrate <app> <file>
// 0002_add_article 以降をやり直したい場合、<file> に 0001_initial を指定する
$ python manage.py migrate samplesite 0001_initial

Running migrations:
  Rendering model states... DONE
  Unapplying samplesite.0003_fix_article... OK
  Unapplying samplesite.0002_add_article... OK

// 0002_add_article 以降の実行が取り消される
$ python manage.py showmigrations samplesite

samplesite
 [X] 0001_initial
 [ ] 0002_add_article
 [ ] 0003_fix_article

file を削除

<app>/migrations フォルダにある、戻したところまでのファイルを削除します。

マイグレーションファイルの作成と実行

python manage.py makemigrations でマイグレーションファイルを作成し、python manage.py migrate で実行します。

$ python manage.py makemigrations samplesite --name article
$ python manage.py migrate samplesite

$ python manage.py showmigrations samplesite

samplesite
 [X] 0001_initial
 [X] 0002_article