目次
対象読者
- Django初心者の方
-
ModuleNotFoundError: No module named ~に悩んでいる方
出たエラー
- 実行コマンドは
python manage.py runserverでした。 - 実行直後に
ModuleNotFoundError: No module named 'modeltomany'が発生し、開発サーバーが起動せず停止しました。
問題点
-
Djangoで作成したアプリを正しく登録していませんでした。
modelonetomanyというアプリを作成していましたが、INSTALLED_APPSに誤ってmodeltomanyと記載していたため、Django がアプリを読み込めず例外を投げていました。 - 重要:
include()はアプリ登録が前提です。
ルート URL でinclude('modelonetomany.urls')を呼び出すと、Django は指定された文字列をモジュールとして import します(参考: Including other URLconf modules)。その際、アプリがINSTALLED_APPSに登録されていないと、内部で参照されるモジュールを解決できません。したがって、アプリ名は設定ファイルに正確に登録する必要があります。
config/settings.py のアプリ登録
公式ドキュメントの INSTALLED_APPS 解説をご参照ください: https://docs.djangoproject.com/en/5.0/ref/settings/#std-setting-INSTALLED_APPS
今回のプロジェクトでは、次のようにアプリを登録しています。
29:config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'modelonetomany', # ← 今回は 'modelonetomany' を追加。各自のアプリ名に置き換えてください。
]
ご自身のプロジェクトでは、'modelonetomany' の部分を作成されたアプリ名に置き換えてください。
解決方法
-
config/settings.pyのINSTALLED_APPSに正しいアプリ名を登録します。例として'modelonetomany'を記載します。 - 設定を保存した後、再度
python manage.py runserverを実行し、サーバーが正常に起動することを確認します。
以上の対応でモジュールが正しく読み込まれ、エラーを解消できました。
補足
- ポイント: アプリ名とモジュール名のスペルミスはよくある原因ですので、作成したアプリ名と設定ファイル上の記述が一致しているかを常に確認することをおすすめします。