Djangoでバックエンドの開発中、
OperationalError at 〇〇
no such column: 〇〇
といったエラーが出ることがよくあります。
普段はこのエラーに対して、migrationファイルを削除し、データベースのデータを初期化する
python manage.py flush
を実行した後、
python manage.py make migrations
python manage.py migrate
でマイグレートしなおすと、動く場合が多かったです。
今回のエラーはそれでは対応できず、
migrationファイルには正しくcolumnが書かれているのに、
データベースには反映されていないことがわかりました。
そこで、
python manage.py --fake app_name zero
を実行すると
Rendering model states... DONE
Unapplying admin.0003_logentry_add_action_flag_choices... FAKED
Unapplying admin.0002_logentry_remove_auto_add... FAKED
Unapplying admin.0001_initial... FAKED
Unapplying app.0001_initial... FAKED
と表示され、これでもエラーがでていたので
データベースを手動削除したところ解決しました。
※この記事を書いているときに「はじめからデータベースを手動削除していれば解決したのかも」と思いました。
原因としてはmigrateを何度もして、migrationファイルを削除したり、データを初期化していた結果、残っていたキャッシュで整合性がとれなくなってしまったのではないかと考えました。詳しい方がいればぜひご教授ください。