#発生タイミング
モデルの一部変更を行い、makemigration実行した際に発生
#エラーの意味
調べたところKeyErrorとはpythonの辞書型のエラーというものらしい。
実際のエラー文を一部抜粋すると以下のような形になっていた。
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を行った際に既存のモデル名からリネームする処理のファイルが出来てしまっていたようです。
その後、モデルのクラス名そのものを変更してしまった為、起こったエラーでした。
該当のマイグレーションファイルを削除し再度実行した結果無事に解決出来ました!