Djangoのエラー「Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an a...」の解決方法


  1. app_labelの宣言の追加: このエラーメッセージは、モデルクラスがapp_labelを明示的に宣言しておらず、INSTALLED_APPS内のアプリケーションに含まれていないことを示しています。解決策として、モデルクラスにapp_label属性を追加し、それに適切なアプリケーション名を指定します。例えば、以下のような修正を行います:
from django.db import models
class Site(models.Model):
    # モデルのフィールド定義
    class Meta:
        app_label = 'myapp'  # 自分のアプリケーション名に置き換える
  1. アプリケーションの追加: もしもINSTALLED_APPSに該当のアプリケーションが含まれていない場合、エラーが発生します。解決策として、settings.pyファイル内のINSTALLED_APPSリストに該当のアプリケーションを追加します。例えば、以下のように修正します:
INSTALLED_APPS = [
    # 他のアプリケーション
    'myapp',  # 自分のアプリケーション名に置き換える
]
  1. Djangoのバージョンによる違い: Djangoのバージョンによっては、このエラーが発生しない場合があります。古いバージョンでは、django.contrib.sitesアプリケーションがデフォルトで有効になっていたため、このエラーが発生しなかったのです。しかし、新しいバージョンではこのアプリケーションがデフォルトで無効になっており、上記のエラーが表示される場合があります。この場合は、INSTALLED_APPS'django.contrib.sites'を追加してみてください。