web-dev-qa-db-fra.com

RuntimeError: La classe de modèle Django.contrib.sites.models.Site ne déclare pas d'étiquette d'application explicite et ne figure pas dans une application dans INSTALLED_APPS.

Je construis une application avec Django Rest Framework et AngularJs. J'utilise Django-rest-auth pour mes besoins d'authentification, bien que je n'ai pas été en mesure de le configurer. Quoi qu'il en soit, j'essaie de configurer cette application avec mon projet. J'ai réalisé que je devais installer Django-rest-auth-registration pour le faire fonctionner. J'ai donc suivi cette documentation pour faire les choses suivantes:

J'ai couru les commandes 

pip installer Django-rest-auth

et

pip installer Django-allauth

Tout mon settings.py ressemble à ceci:

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

J'ai également ajouté les backends d'authentification, les process_de_contexte et les URL appropriées.

Cependant, lorsque j'essaie de migrer, mon terminal renvoie l'erreur suivante: 

RuntimeError: La classe de modèle Django.contrib.sites.models.Site not déclarer un app_label explicite et ne se trouve pas dans une application dans INSTALLED_APPS.

Pourquoi est-ce que je reçois cette erreur et comment la résoudre pour migrer mon projet? Merci!

41
darkhorse

Le correctif

Ajoutez simplement les infrastructures de sites de Django à vos applications et définissez SITE_ID sur 1 dans vos paramètres.

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

SITE_ID = 1

Pourquoi cela arrive-t-il?

Django's Sites Framework est un module contributif fourni avec la bibliothèque principale qui permet l'utilisation d'une seule application/base de code Django avec différents sites (pouvant utiliser différentes bases de données, vues logiques, etc.). Le paramètre SITE_ID }, comme indiqué dans la documentation, "est utilisé pour que les données d'application puissent être couplées à des sites spécifiques et qu'une base de données unique puisse gérer le contenu de plusieurs sites."

Dans ce cas particulier, AllAuth requiert la structure de sites pour fonctionner correctement. De nombreuses autres bibliothèques tierces sont conçues pour gérer en toute sécurité les cas où plusieurs sites peuvent être présents et, en tant que tels, peuvent être meilleurs. 

105
Ian Price

J'ai atterri sur ce post via une recherche Google. Mon problème était en cours d'exécution des tests qui ont explosé avec l'erreur:

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

Cela fonctionnait sur Python 2.7.x avec des importations absolues. Comme mentionné par Colton Hicks dans les commentaires ci-dessous, cela peut également arriver avec Python 3 (pytest 3.2.3 avec Django 1.11.4).

Dans mon tests.py:

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

Après avoir remplacé l’importation relative par une importation absolue, le problème a disparu:

from taxonomy.models import Demographics, Term

HTH

10
berto

Il suffit de mettre 

'Django.contrib.sites',

dans toute l'application sur settings.py

et mettre 

SITE_ID = 1

sur les paramètres py

1
lilhamad

J'ai l'erreur ci-dessus. Cependant, mon problème était dans l'urls.py. Je suivais la recette de cuisine PyDanny Django. Mon erreur a été de mettre dans l'urls.py cette ligne:

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

quand j'ai corrigé à ceci:

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

tout allait bien. J'ai également changé mes applications locales (c'est ce que j'ai fait en premier et l'erreur critique est donc la mauvaise configuration de l'URL):

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