1. ホーム
  2. django

[解決済み] RuntimeError: モデルクラス django.contrib.sites.models.Site は明示的に app_label を宣言しておらず、 INSTALLED_APPS にあるアプリケーションに属していません。

2022-12-16 21:53:57

質問

Django Rest FrameworkとAngularJsでアプリケーションを構築しています。私は私の認証の目的のためにDjango-rest-authを使用していますが、私はそれを設定することができませんでした。とにかく、私はこれをセットアップしようとしています app を私のプロジェクトで設定しようとしています。私はそれを実行するためにdjango-rest-auth-registrationをインストールする必要があることに気づいたので、次のようにしました。 ドキュメント を参考に、以下のことをやってみました。

コマンドを実行しました

pip install django-rest-auth

pip install django-allauth

任意の私の 設定.py はこのようになります。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 3rd party apps
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'allauth',
    'allauth.account',
    'rest_auth.registration',

    # My app
    'myapp',
]

認証バックエンド、context_processors、そして適切なURLも追加しました。

しかし、移行しようとすると、ターミナルで次のエラーがスローされます。

RuntimeError: モデルクラス django.contrib.sites.models.Site は明示的に app_label を宣言していません。 は明示的な app_label を宣言していませんし、installed_apps のアプリケーションにも入っていません。 の中にありません。

なぜこのエラーが発生するのでしょうか、また、プロジェクトを移行するためにどのように解決すればよいのでしょうか。ありがとうございます。

どのように解決するのですか?

修正方法

ただ、Django の サイトフレームワーク をアプリに追加し、設定で SITE_ID を 1 に設定するだけです。

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
]

SITE_ID = 1

なぜこのようなことが起こるのでしょうか?

Django のサイトフレームワーク はコアライブラリにバンドルされた寄贈モジュールで、単一の Django アプリケーション/コードベースを異なるサイト (異なるデータベースやビューのロジックなどを使用できる) で使用できるようにするものです。このフレームワークは SITE_ID 設定 は、docs に書かれているように、 " は、アプリケーション データを特定のサイトにフックし、1 つのデータベースで複数のサイトのコンテンツを管理できるようにするために使用されます。 ."

この特定のケースでは AllAuth は Sites Framework を必要とします。 を必要とします。他の多くのサードパーティライブラリは、複数のサイトが存在するケースを安全に処理するために構築されており、そのようなものとして最適かもしれません。