0
0

More than 1 year has passed since last update.

【超重要!!】Djangoでモデルのマイグレートを元に戻す方法

Posted at

目的

Djangoのmodels.pyでモデルを作成し、マイグレーションを行ったものの間違いを見つけて修正したい。しかし一箇所を直すためにmigrationファイルを作成するのもあとで保守がしづらくなると考え、前回(もしくはそれ以前)のバージョンに戻して情報を編集したい。

実施環境

ハードウェア環境

項目 情報
OS macOS Catalina(10.15.7)
ハードウェア MacBook Air (11-inch, Early 2015)
プロセッサ 1.6 GHz デュアルコアIntel Core i5
メモリ 4 GB 1600 MHz DDR3
グラフィックス intel HD Graphics 6000 1536 MB

ソフトウェア環境

項目 情報
homebrew 3.3.8
mysql Ver 8.0.27 for macos10.15 on x86_64
python 3.8.12
anaconda 4.10.1
django 21.2.4
pip 3.1.2

概要

  1. python manage.py showmigrationでこれまでのmigrationの履歴を確認する
  2. python manage.py migrate app_name migration_version_namemigrationのバージョンを指定して戻る
  3. 最新のマイグレーションファイル(/migrations/配下の番号が一番古いもの)を直接削除

詳細

これまでのmigrationの履歴を確認する

$ python manage.py showmigrations
tinder
 [X] 0001_initial
 [X] 0002_auto_20211219_1625
 [X] 0003_auto_20211223_1038
 [X] 0004_hotguys

ここからtinderというデータベースには4つのマイグレーションファイルが存在し、Xが左についている全てのマイグレーションが現在のアプリに反映されていることがわかる。

今回は一個前のマイグレーションに戻したいため、0003_auto_20211223_1038まで戻ることとする。

migrationのバージョンを指定して戻る

python manage.py migrate アプリ名 マイグレーション名で戻る

$ python manage.py migrate tinder 0003_auto_20211223_1038
Operations to perform:
  Target specific migration: 0003_auto_20211223_1038, from tinder
Running migrations:
  Rendering model states... DONE
  Unapplying tinder.0004_hotguys... OK

完了しているため、もう一度マイグレーションの反映状況を確認。

$ python manage.py showmigrations
tinder
 [X] 0001_initial
 [X] 0002_auto_20211219_1625
 [X] 0003_auto_20211223_1038
 [ ] 0004_hotguys

0004_hotguysの左には[X]がないため、反映されていないことがわかる

最新のマイグレーションファイルを直接削除

/migration/配下の0004_hotguysファイルを右クリックで削除する
お決まりの確認だ。

$ python manage.py showmigrations
tinder
 [X] 0001_initial
 [X] 0002_auto_20211219_1625
 [X] 0003_auto_20211223_1038

反映され、消えている!!!

参考文献

Djangoのマイグレーションをロールバック、元に戻す方法

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0