Lors de la mise à niveau vers Django 1.7, le message d'erreur suivant de ./manage.py
$ ./manage.py
Traceback (most recent call last):
File "./manage.py", line 16, in <module>
execute_from_command_line(sys.argv)
File "/home/johnc/.virtualenvs/myproj-Django1.7/local/lib/python2.7/site-packages/Django/core/management/__init__.py", line 427, in execute_from_command_line
utility.execute()
File "/home/johnc/.virtualenvs/myproj-Django1.7/local/lib/python2.7/site-packages/Django/core/management/__init__.py", line 391, in execute
Django.setup()
File "/home/johnc/.virtualenvs/myproj-Django1.7/local/lib/python2.7/site-packages/Django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/johnc/.virtualenvs/myproj-Django1.7/local/lib/python2.7/site-packages/Django/apps/registry.py", line 89, in populate
"duplicates: %s" % app_config.label)
Django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: foo
Quel est le problème et comment puis-je le résoudre?
Le problème est qu'avec les modifications apportées aux applications dans Django 1.7, les applications doivent posséder une étiquette unique.
Par défaut, le libellé de l'application correspond au nom du package. Par conséquent, si vous disposez d'un package portant le même nom que l'un de vos modules d'application (foo
dans ce cas), vous obtiendrez cette erreur.
La solution consiste à remplacer l'étiquette par défaut de votre application et à forcer le chargement de cette configuration en l'ajoutant à __init__.py
.
# foo/apps.py
from Django.apps import AppConfig
class FooConfig(AppConfig):
name = 'full.python.path.to.your.app.foo'
label = 'my.foo' # <-- this is the important line - change it to anything other than the default, which is the module name ('foo' in this case)
et
# foo/__init__.py
default_app_config = 'full.python.path.to.your.app.foo.apps.FooConfig'
Voir https://docs.djangoproject.com/fr/1.7/ref/applications/#for-application-authors
J'ai trouvé une solution simple pour cela. Dans mon cas, la ligne suivante est ajoutée deux fois sous INSTALLED_APPS,
'Django.contrib.foo',
Suppression d'une ligne résout le problème pour moi.
J'ai eu la même erreur - essayez ceci:
dans INSTALLED_APPS, si vous incluez 'foo.apps.FooConfig', alors Django sait déjà inclure l'application foo dans l'application, il n'est donc pas nécessaire d'inclure également 'foo'. Avoir 'foo' et 'foo.apps.FooConfig' sous INSTALLED_APPS peuvent être la source de votre problème.
Comme à partir de là dit ceci est un nouveau Django 1.7 fonctionnalité qui ajoute une sorte de "registre d'applications" où les applications doivent être déterminées de manière unique (et non seulement avoir différents python chemins).
L'attribut name
est le chemin python (unique)), mais le label
devrait également être unique. Par exemple, si vous avez une application nommée 'admin', vous devez définir le nom (name = 'python.path ') et une étiquette qui doit aussi être unique (label =' mon administrateur 'ou comme dit le mettre en entier python chemin qui est toujours unique).
Eh bien, j'ai créé l'application auth
et je l'ai incluse dans INSTALLED_APP
comme src.auth
(car il est dans le dossier src
) et j’ai eu cette erreur, car il y a Django.contrib.auth
app aussi. Donc, je l'ai renommé comme authentication
et le problème a été résolu.
J'ai le même problème. Ici, mon nom d’application était chat et dans le fichier settings.py, sous les applications installées, j’ai écrit chat.apps.ChatConfig alors que j’avais déjà inclus la discussion du nom de l’application en bas. Lorsque j'ai supprimé le problème de mine chat.apps.ChatConfig, il a été résolu lors des migrations. Cette erreur peut être due à la même instance que vous avez peut-être définie deux fois dans le nom de l'application dans le fichier settings.py. J'espère que ça marche !!