Python + Django で利用するWebアプリを作る際に「makemigrations」後にデータベース変更を行う「migrate」をする際に「ValueError…a lazy rederence to…doesn’t privide model」エラーが表示される場合の対処法を備忘録的に投稿します。
migrateコマンド時のエラー
Djangoでは[models.py]ファイルを編集時に “makemigrations” コマンドを実行してから “migrate” コマンドを実行してデータベースファイルなどを更新する手順になっています。
以前に “migrate” コマンドを実行して[db.sqlite3]などのデータベースファイルが生成されているような場合には “makemigrations” コマンドを実行時に「ValueError…a lazy rederence to…doesn’t privide model」などのメッセージが表示されてエラーが発生する場合があります。
エラー時の対処法
メッセージからデータベースのフィールド定義の参照に不整合があるので、データベースファイルを削除することで対処ができます。(既にデータが入っている場合には、消えてしまうので注意してください)
具体的には次の手順で進めます。
1. VSCodeを起動してプロジェクト内の[db.sqlite3]ファイルを探します。
2.[db.sqlite3]ファイルを選択して削除をします。(保持されているデータも消去されてしまうので注意)
3.[ターミナル]画面で “migrate” コマンドを入力して実行します。
migrations ファイルの削除
データベースファイル[db.sqlite3]を削除しても改善しない場合には[migrations]フォルダー内のファイルを削除することで改善する場合があります。
1. プロジェクト内の[migrations]フォルダーを開きます。
2. フォルダー内の[__init__.py]ファイル以外の拡張子(.py)ファイルを削除します。(”makemigrations” コマンドで自動生成されたファイルなので “models.py” ファイルがあれば、再作成可能です)
3.[ターミナル]画面で “makemigrations” コマンドを入力して実行します。([migrations]フォルダーにファイルが自動生成されます)
4.[ターミナル]画面で “migrate” コマンドを入力して実行します。
まとめ
Djangoの[models.py]ファイルを編集した際には “makemigrations” コマンドで更新用のファイルを生成してから “migrate” コマンドでデータベースファイルを更新する手順になっています。
更新を続けていくと、データベース内の参照に不整合が生じて “migrate” 実行時にエラーメッセージ「ValueError…a lazy rederence to…doesn’t privide model」が表示されてデータベースファイルが更新できなくなる場合があります。
[db.sqlite3]ファイルの更新ができない場合にはファイルを削除(データベース内のデータが削除されてしまうので注意)してから”migrate” コマンドを実行することでエラーを回避することができます。
Python + Djangoのプロジェクトで「ValueError…a lazy rederence to…doesn’t privide model」エラーが発生している場合の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。