LoginSignup
1
1

More than 3 years have passed since last update.

djangoでKeyError: ('app_label', 'self.model_name_lower')が出た時の対処方

Last updated at Posted at 2021-02-28

発生タイミング

モデルの一部変更を行い、makemigration実行した際に発生

エラーの意味

調べたところKeyErrorとはpythonの辞書型のエラーというものらしい。
実際のエラー文を一部抜粋すると以下のような形になっていた。

エラー文、terminal
 model_state = state.models[app_label, self.model_name_lower]
KeyError: ('アプリ名', '項目名')

上段の文章から考えるとアプリの中の、項目名がおかしいよとのこと。

最初はモデル設計が違うのかと該当箇所を調べ、項目名等を修正したが直らず。
そもそもmodels.pyの中に該当の項目名すら無いのに発生してしまいました。

調べていくとmigrationファイルが悪さをしている可能性があるということがわかったので、一旦マイグレーションファイルの履歴を確認することにしました。

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

% python manage.py showmigrations

すると以下のような結果に


app_name
 [ ] 0001_initial
 [ ] 0002_auto_20201221_1907
 [ ] 0003_auto_20201231_0005
 [ ] 0004_auto_20210125_1430
 [ ] 0005_auto_20210126_0951
 [ ] 0006_auto_20210213_2037
 [ ] 0007_auto_20210223_1819
 [ ] 0008_auto_20210228_1527

[ ]が空白になっているところは実行されていないということらしいので、再度migrateを実行すると案の定エラーが発生。


  Applying app_name.0002_auto_20201221_1907... OK
  Applying app_name.0003_auto_20201231_0005... OK
  Applying app_name.0004_auto_20210125_1430... OK
  Applying app_name.0005_auto_20210126_0951... OK
  Applying app_name.0006_auto_20210213_2037... OK
  Applying app_name.0007_auto_20210223_1819... OK
  Applying app_name.0008_auto_20210228_1527...Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()  以下エラー文

これでエラーを起こしているマイグレーションファイルが特定できました!

該当のマイグレーションファイルを見ると


operations = [
        migrations.RenameField(
            model_name='クラス名',
            old_name='古い項目名',
            new_name='新しい項目名',
        ),

どうやら以前modelの項目名を変更を行い、makemigrationを行った際に既存のモデル名からリネームする処理のファイルが出来てしまっていたようです。

その後、モデルのクラス名そのものを変更してしまった為、起こったエラーでした。

該当のマイグレーションファイルを削除し再度実行した結果無事に解決出来ました!

1
1
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
1
1