エラー内容
DjangoでDBからデータ取得するモジュールを実行させたら、以下のエラーになりました。
RuntimeError: Model class sample.models.Sample doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
原因と解決策
Sample
モデルがDjangoアプリケーションに正しく登録されていないか、app_label
が指定されていない、と言われています。アプリケーションの登録はsettings.py
のINSTALLED_APPS
で行いますが、ここには記載済みでした。
app_label
というのをモデルに明示的に記載することで解決した、という記事もあったので、参考にしてみたら解決しました。
通常、Djangoはモデルの所属アプリケーションを自動的に判断してくれますが、一部の状況では自動判断できない場合があります。例えば、今回私はアプリケーションディレクトリの外で、データ取得のコマンドを叩くモジュールを試験的に置いていました。そのため、Djangoがどのアプリケーションに属するかを正確に判断できなかったのでしょう。
ということで、以下のようにapp_label
を追記。
models.py
from django.db import models
class Sample(models.Model):
class Meta:
app_label = 'sample' # ここを追加
db_table = 'sample'
app_label
の値は、INSTALLED_APPS
内のDjangoアプリケーション名と一致する必要があります。