wake-up-neo.com

RuntimeError: Die Modellklasse Django.contrib.sites.models.Site deklariert keine expliziten app_label und ist nicht in einer Anwendung in INSTALLED_APPS enthalten

Ich baue eine Anwendung mit Django Rest Framework und AngularJs. Ich verwende Django-rest-auth für meine Authentifizierungszwecke, obwohl ich es nicht einrichten konnte. Ich versuche jedenfalls, diese App mit meinem Projekt einzurichten. Mir wurde klar, dass ich Django-rest-auth-registration installieren muss, um es zum Laufen zu bringen, also folgte ich dieser Dokumentation , um folgende Dinge zu tun:

Ich habe die Befehle ausgeführt 

pip install Django-rest-auth

und

pip install Django-allauth

Mein settings.py sieht folgendermaßen aus:

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',
]

Ich habe auch die Authentifizierungs-Backends, context_processors und die richtigen URLs hinzugefügt.

Wenn ich jedoch versuche zu migrieren, gibt mein Terminal den folgenden Fehler aus: 

RuntimeError: Modellklasse Django.contrib.sites.models.Site nicht deklarieren Sie ein explizites app_label und befindet sich nicht in einer Anwendung in INSTALLED_APPS.

Warum erhalte ich diesen Fehler und wie löse ich ihn, um mein Projekt zu migrieren? Vielen Dank!

41
darkhorse

Die Reparatur

Fügen Sie einfach Djangos Sites Framework zu Ihren Apps hinzu und setzen Sie SITE_ID in Ihren Einstellungen auf 1.

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

SITE_ID = 1

Warum passiert das?

Django's Sites Framework ist ein mit der Kernbibliothek gebündeltes Modul, das die Verwendung einer einzelnen Django-Anwendung/Codebase mit verschiedenen Sites (die verschiedene Datenbanken, Logik in Ansichten usw. verwenden kann) ermöglicht. Die Einstellung " SITE_ID ", wie in den Dokumenten angegeben, "wird verwendet, damit sich Anwendungsdaten in bestimmte Sites einhaken können und eine einzige Datenbank Inhalte für mehrere Sites verwalten kann."

In diesem Fall benötigt AllAuth das Sites Framework , um ordnungsgemäß zu funktionieren. Viele andere Bibliotheken von Drittanbietern sind so konzipiert, dass Fälle sicher behandelt werden können, an denen möglicherweise mehrere Websites vorhanden sind. 

105
Ian Price

Ich bin in diesem Beitrag über die Google-Suche gelandet. Mein Problem war das Ausführen von Tests, die mit dem Fehler explodiert sind:

RuntimeError: Model class app.taxonomy.models.Term doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

Dies lief auf Python 2.7.x mit absoluten Importen. Wie von Colton Hicks in den Kommentaren erwähnt, kann dies auch bei Python 3 passieren (pytest 3.2.3 mit Django 1.11.4).

In meinem tests.py:

from __future__ import absolute_import
[...]
from .models import Demographics, Term

Nachdem der relative Import in einen absoluten Import geändert wurde, ist das Problem behoben:

from taxonomy.models import Demographics, Term

HTH

10
berto

Einfach setzen 

'Django.contrib.sites',

in istall app auf settings.py

und setzen 

SITE_ID = 1

auf Einstellungen py

1
lilhamad

Ich habe den Fehler oben erhalten. Mein Problem war jedoch das in der urls.py. Ich folgte dem PyDanny-Ausstecher-Django-Rezept. Mein Fehler war es, in der urls.py folgende Zeile einzufügen:

    url(r'^demo/', include('project.demoapp.urls', namespace='demoapp')),

wenn ich das korrigiert habe:

    url(r'^demo/', include('demoapp.urls', namespace='demoapp')),

alles war gut. Ich habe auch meine lokalen Apps geändert (ich habe dies zuerst gemacht und der kritische Fehler war die falsche Konfiguration der URL):

LOCAL_APPS = [
    # Your stuff: custom apps go here
    'demoapp.apps.DemoAppConfig',
]
1
hum3