web-dev-qa-db-de.com

Wie löse ich "Django.core.exceptions.ImproperlyConfigured: Anwendungsbezeichnungen sind nicht eindeutig, Duplikate: foo" in Django= 1.7?

Beim Upgrade auf Django 1.7 wird folgende Fehlermeldung von ./manage.py Angezeigt

$ ./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

Was ist das Problem und wie löse ich es?

52
John Carter

Das Problem ist, dass mit den Änderungen an Apps in Django 1.7) Apps eine eindeutige Bezeichnung haben müssen.

Standardmäßig ist die App-Bezeichnung der Paketname. Wenn Sie also ein Paket mit demselben Namen wie eines Ihrer App-Module haben (in diesem Fall foo), tritt dieser Fehler auf.

Die Lösung besteht darin, die Standardbezeichnung für Ihre App zu überschreiben und das Laden dieser Konfiguration durch Hinzufügen zu __init__.py Zu erzwingen.

# 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)

und

# foo/__init__.py

default_app_config = 'full.python.path.to.your.app.foo.apps.FooConfig'

Siehe https://docs.djangoproject.com/en/1.7/ref/applications/#for-application-authors

79
John Carter

Ich habe dafür eine einfache Lösung gefunden. In meinem Fall wird die folgende Zeile zweimal unter INSTALLED_APPS hinzugefügt.

'Django.contrib.foo',

Eine Zeile entfernt behebt das Problem für mich.

54
user2989777

Ich hatte den gleichen Fehler - versuchen Sie Folgendes:

wenn Sie in INSTALLED_APPS 'foo.apps.FooConfig' einbinden, dann weiß Django) bereits, dass die foo-App in die Anwendung eingebunden werden muss Sowohl 'foo' als auch 'foo.apps.FooConfig' unter INSTALLED_APPS könnten die Ursache für Ihr Problem sein.

9
Sean

Wie von hier aus sagte, ist dies ein neues Django 1.7 Feature , das eine Art "App-Registrierung" hinzufügt, in der Anwendungen eindeutig bestimmt werden müssen (und nicht nur mit unterschiedlichen python Pfaden).

Das name Attribut ist der python Pfad (eindeutig), aber der label sollte ebenfalls eindeutig sein. Wenn Sie beispielsweise eine App mit dem Namen 'admin' haben, müssen Sie den Namen (name = 'python.path') definieren ') und eine Bezeichnung, die ebenfalls eindeutig sein muss (label =' my admin 'oder wie gesagt den vollständigen python Pfad, der immer eindeutig ist).

3
gdoumenc

Nun, ich habe die App auth erstellt und sie in INSTALLED_APP Wie src.auth Eingefügt (weil sie sich im Ordner src befindet). denn es gibt auch die App Django.contrib.auth. Also habe ich es wie authentication umbenannt und das Problem gelöst.

2
М.Б.

enter image description here Ich habe das gleiche Problem. Hier war mein App-Name "Chat" und in der Datei settings.py habe ich unter "Installierte Apps" "chat.apps.ChatConfig" geschrieben, während ich unten bereits den App-Namen "Chat" eingefügt habe. Als ich die chat.apps.ChatConfig entfernte, wurde mein Problem während der Migrationen gelöst. Dieser Fehler kann auf dieselbe Instanz zurückzuführen sein, die Sie möglicherweise zweimal in der Datei settings.py als App-Name foo definiert haben. Ich hoffe das klappt !!