#はじめに
Djangoで記事投稿サイトを作っていた際に発生し、かなり長い間悩ませてくれたOperationalError: no such tableの解決方法を記事に残しておきます!
難しいことは抜きにして、プログラミング初心者でも分かるよう解決手段に特化して書いてみました。
Mac環境ですので、必要に応じてWindowsに読み替えてください。
#目次
①エラー内容
②エラー解決手順
#①エラー内容
投稿記事にカテゴリを付与すべくmodels.pyにカテゴリを追加した後、migrateをしたところ以下のエラーが
django.db.utils.OperationalError: no such table: app_category
*app_categoryのappは僕が設定したappというフォルダ名で、categoryは僕が設定したクラス名です。
エラー発生時には皆さんが設定したフォルダ名およびクラス名が入ります。
上記エラーは、データベース上にapp_categoryというテーブル(データ)が入ってないよという意味。
#②エラー解決手順
正直エラー内容についてちゃんと理解できていませんが、以下手順をとることで解決しました。
- 一度db.sqlite3ファイルを削除
- pythonファイルをチェックし、categoryが関係しているコードを全てコメントアウト
- python3 manage.py makemigrations app をターミナルに入力(繰り返しですが、appは僕が設定したapp用のフォルダ名です)
- python3 manage.py migrate をターミナルに入力
- models.pyファイルのcategory関連コードを復活
- 再度python3 manage.py makemigrations appを入力
この時、「categoryがnon-nullableだ。デフォルト値を設定しろ」というようなメッセージが出る場合があります。その時は選択肢1を入力し、次の画面でデフォルト値として適当な数字(1でok)を入れます。 - 再度python3 manage.py migrateを入力
- python3 manage.py runserverでアプリページに移動
- admin画面にログイン
- categoryを設定(カテゴリを一つ追加し、何らかの名前をつける)
- 記事を一つ作成し、categoryもつける
- コードに戻り、2.でコメントアウトしていたコードを全て元に戻す
以上です!
同じ勉強グループの中で同様のエラーが出ていた人が複数名いたのですが、上記手順で全員解決できていました。
僕は最終的に3種類のカテゴリ機能を持たせたのですが、__2から12までの手順を行いながらカテゴリを一つずつ追加__していきました。
正直面倒だとは思いますが、先へ進めず困っている方は試してみてください!