single.php

Djangoのmigrate実行時の「ValueError…a lazy rederence to…doesn’t privide model」対処法

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」エラーが発生している場合の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です