Djangoでmakemigrationsコマンドを実行しても、No changes detectedと言われる場合の対処法

Djangoでマイグレーションファイルを作る
python3 manage.py makemigrations
このコマンドを実行しても返ってくるのが、
No changes detected
とされ、マイグレーションファイルが作られないことがある。当然この状態でmigrateコマンドを打ってもDBには反映されない。
そこで、本記事ではこの対処法について列挙する。
対処法1:settings.pyのINSTALLED_APPSに対象のアプリを追加
python3 manage.py makemigrations
python3 manage.py migrate
この2つのコマンドを打って、models.py(モデル)に書かれた内容をDBに反映させるのだが、その際にモデルが読み込まれるのは、settings.pyのINSTALLED_APPSに追加されたアプリだけである。
つまり、settings.pyのINSTALLED_APPSに追加されていなければ、いくらモデルを正しく記述してもDBには反映されない。故に『No changes detected』と言われてしまう。
対処法2:makemigrationsにアプリ名を追加する。
マイグレーションファイル作る時、
python3 manage.py makemigrations
ではなく、
python3 manage.py makemigrations [アプリ名]
とする。これでマイグレーションファイルが作られる。この状態が起こりうるのは、[アプリ名]のmigrationsディレクトリを手動で削除した時。
migrationsディレクトリを削除して、1から作り直したいときなどにハマることがあるので、そのときは上記コマンドの用に[アプリ名]を明示的に指定してマイグレーションファイルを作らせる。
対処法3:migrationsディレクトリをチェックする
実はすでにmakemigrationsでマイグレーションファイルが作られていて、『No changes detected』と言われているパターン。
アプリディレクトリ内にあるmigrationsディレクトリをチェックする。models.pyの変更がマイグレーションファイルに反映されているかチェックする。同時に、models.pyを編集した後、保存していないかもチェックする。
models.pyが書き換わり、保存され、なおかつINSTALLED_APPSにアプリが追加されている場合に限り、アプリが作られる点に注意する。
結論
Djangoのマイグレーションファイル生成はLaravelなどと違って、コマンド一発の自動生成なので、ハマる場合はかなりハマる。
自動生成は便利ではあるが、モデル変更の解釈も自動生成に委ねられるので、気に入らない場合は自分でマイグレーションファイルを書き換えする必要がある。この辺りも初見殺しとしか。