249 votes

Le modèle Django "ne déclare pas un label app explicite"

Je suis au bout du rouleau. Après une dizaine d'heures de dépannage, probablement plus, je pensais que j'étais enfin dans les affaires, mais j'ai eu:

Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label 

Il y a TELLEMENT PEU d'infos sur ce sur le web, et aucune solution n'a résolu mon problème. Tout conseil serait extrêmement apprécié.

Je suis à l'aide de Python 3.4 et Django 1.10.

De mon settings.py:

INSTALLED_APPS = [
    'DeleteNote.apps.DeletenoteConfig',
    'LibrarySync.apps.LibrarysyncConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Et mon apps.py fichiers ressembler à ceci:

from django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

et

from django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'

171voto

Xeberdee Points 688

Avez-vous besoin de mettre dans votre nom de l'application dans le fichier de paramètres? L' myAppNameConfig est la valeur par défaut de la classe générée à apps.py par la .manage.py createapp myAppName de commande. Où myAppName est le nom de votre application.

settings.py

INSTALLED_APPS = [
'myAppName.apps.myAppNameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

De cette façon, le fichier de paramètres permet de déterminer ce que vous voulez l'appeler à votre demande. Vous pouvez changer la façon dont il regarde plus loin dans le apps.py fichier en ajoutant le code suivant dans

myAppName/apps.py

class myAppNameConfig(AppConfig):
    name = 'myAppName'
    verbose_name = 'A Much Better Name'

94voto

samuel Points 71

Je reçois la même erreur et je ne sais pas comment résoudre ce problème. Il m'a fallu de nombreuses heures pour constater que j'ai un init.py dans le même répertoire que le manage.py de Django.

Avant:

 |-- myproject
  |-- __init__.py
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py
 

Après:

 |-- myproject
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py
 

Il est assez confus que vous obteniez l'erreur "ne déclare pas un app_label explicite". Mais la suppression de ce fichier init a résolu mon problème.

58voto

stasdeep Points 877

J'ai eu exactement la même erreur lors de l'exécution de tests avec PyCharm. Je l'ai corrigé en définissant explicitement les variables d'environnement DJANGO_SETTINGS_MODULE . Si vous utilisez PyCharm, cliquez simplement sur le bouton Modifier les configurations et choisissez Variables d'environnement .

Définissez la variable sur your_project_name.settings et cela devrait régler le problème.

Il semble que cette erreur se produise car PyCharm exécute des tests avec ses propres manage.py .

40voto

user171654 Points 26

Je l'ai eu quand j'ai utilisé ./manage.py shell puis j'ai importé accidentellement depuis le répertoire racine du projet

 # don't do this
from project.someapp.someModule import something_using_a_model
# do this
from someapp.someModule import something_using_a_model

something_using_a_model()
 

23voto

bwaaaaaa Points 148

J'ai eu le même problème tout à l'heure. J'ai corrigé le mien en ajoutant un espace de nom sur le nom de l'application. J'espère que quelqu'un trouvera cela utile.

apps.py

 from django.apps import AppConfig    

class SalesClientConfig(AppConfig):
        name = 'portal.sales_client'
        verbose_name = 'Sales Client'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X