| この記事の要点 |
|
エラー内容
RuntimeError: Model class ~ doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
「~」の部分には myapp.models.Article のようなモデルのクラス名が入ります。python manage.py runserver・migrate・shell の起動時や、テスト実行時に発生します。
原因: モデルがどのアプリに属するか分からない
Django のモデルは必ずどこかの「アプリ」に属し、そのアプリのラベル(app_label)でテーブル名やマイグレーションが管理されます。Django はモデルクラスが定義されたモジュールのパスを、INSTALLED_APPS に登録されたアプリと照合して所属を決めます。照合できず、モデルの Meta に app_label も書かれていないとこのエラーになります。
| 原因 | よくある状況 |
|---|---|
| INSTALLED_APPS への登録漏れ | startapp で作ったアプリを settings.py に追加し忘れた |
| apps.py の name の不一致 | アプリをフォルダごと移動・リネームしたのに name = 'myapp' が古いまま |
| import パスの違い | 登録は 'myapp' なのに、コード側で from myproject.myapp.models import ... のように別のパスで import している |
| サードパーティのアプリの登録漏れ | django.contrib.auth や django.contrib.contenttypes を外した、ライブラリの説明にあるアプリを追加していない |
| Django 外のスクリプト | バッチや Jupyter で django.setup() の前にモデルを import した |
対処法 1: INSTALLED_APPS にアプリを追加する
最も多い原因です。対象のモデルを含むアプリを settings.py の INSTALLED_APPS に登録します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # ← 追加
# 'myapp.apps.MyappConfig', # AppConfig を指定する書き方でも可
]
エラーメッセージに出ているモデルのパス(例: blog.models.Post)の先頭部分が、登録すべきアプリ名の目安です。
対処法 2: apps.py の name を確認する
アプリをサブフォルダに置いている場合(例: apps/blog/)は、apps.py の name をPython のパッケージパス全体にします。
# apps/blog/apps.py
from django.apps import AppConfig
class BlogConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.blog' # 'blog' ではなくフルパス
# settings.py
INSTALLED_APPS = [
# ...
'apps.blog',
]
そのうえで、コード内の import も from apps.blog.models import Post のように同じパスに揃えます。アプリ内からは from .models import Post の相対 import にすると、パスの揺れが起きにくくなります。
対処法 3: Django 外のスクリプトでは setup してから import
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
from myapp.models import Article # setup の後で import する
定期実行するバッチは、この方法よりも Django のカスタム管理コマンド(python manage.py コマンド名)として作るほうが確実です。
対処法 4: app_label を明示する(特殊なケース)
アプリのフォルダ外にモデルを置く必要があるなど、どうしても所属を自動判定できない場合は、Meta で明示できます。ただし、通常は対処法 1・2 で直すのが正攻法です。
class Article(models.Model):
title = models.CharField(max_length=200)
class Meta:
app_label = 'myapp' # INSTALLED_APPS に登録済みのアプリのラベル
確認方法
# 設定全体のチェック
python manage.py check
# 登録済みアプリのラベル一覧を表示
python manage.py shell -c "from django.apps import apps; print([a.label for a in apps.get_app_configs()])"
一覧に目的のアプリのラベルが無ければ、INSTALLED_APPS の登録か apps.py の設定に問題があります。修正後は python manage.py makemigrations を実行し、モデルのマイグレーションが作られることも確認しましょう。
関連
- Django アプリケーション作成完全ガイド(startapp / INSTALLED_APPS / urls / views)
- Django Model の定義方法完全ガイド — フィールド型と Meta
- Djangoカスタム管理コマンドの作成|BaseCommand・handleとcron連携
- Django マイグレーションファイル作成完全ガイド
子ページはありません
- Invalid HTTP_HOST header: '...'. You may need to add '...' to ALLOWED_HOSTS
- CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
- django.utils.datastructures.MultiValueDictKeyError
- Forbidden (403) CSRF verification failed. Request aborted.
- ModuleNotFoundError: No module named 'MySQLdb'
- WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set for database connection
- Unknown column 'table_name.id' in 'field list'
- RuntimeError: Model class ~ doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
- get() returned more than one MynumberRegist -- it returned 2!
- django.db.utils.OperationalError: (2006, "Can't connect to MySQL server")
- 'include' is not defined
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Djangoテンプレートのif・elif・else|型・未定義と複合条件 2026-10-25 23:02:54
- DjangoのSQLite接続設定|DATABASES・dbshellとCLIエラーの確認 2026-10-25 22:56:56
- Django REST FrameworkでAPIを作る|URL接続・入力検証・所有者の認可 2026-10-25 21:03:21
- DjangoモデルをJSONで返す|型・公開フィールド・DRF認可 2026-10-25 20:46:35
- precompile standard library とは(Pythonインストール) 2026-10-25 20:30:17
- ANACONDA NAVIGATORの起動方法 2026-10-25 20:30:17
- DjangoのAjax POST|CSRF・JSON入力検証・DRFの認可 2026-10-25 20:30:16
- Django/MySQLのUnknown column ...id|主キー・実列・別名の確認 2026-10-25 20:08:53
- 【django】limit, offsetの指定方法 2026-10-25 20:08:51
- Djangoの本番で変更が反映されないとき|プロセス・テンプレート・静的配信の確認 2026-10-25 19:40:35
- Django のファイルアップロード|ファイル名と拡張子の取得 2026-10-25 19:40:35
- djangoにおけるHTTPステータスコードの返し方 2026-10-25 19:40:34
- PythonのResponseオブジェクトの中身の確認 2026-10-25 19:17:54
- Python で Cookie を扱う|requests の Session と http.cookies 2026-10-25 19:17:54
- Python で HTTP リクエスト|requests・urllib・httpx と curl の対応 2026-10-25 19:17:53