如何在Django 1.7中解决"django.core.exceptions.ImproperlyConfigured:应用程序标签不唯一,重复:foo"?

Joh*_*ter 55 django django-1.7

在升级到Django 1.7时,我收到以下错误消息 ./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
Run Code Online (Sandbox Code Playgroud)

有什么问题,如何解决?

Joh*_*ter 83

问题是,随着Django 1.7中应用程序的更改,应用程序需要具有唯一标签.

默认情况下,应用程序标签是包名称,因此如果您有一个与您的某个应用程序模块同名的包(foo在本例中),您将遇到此错误.

解决方案是覆盖应用程序的默认标签,并通过添加它来强制加载此配置__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)
Run Code Online (Sandbox Code Playgroud)

# foo/__init__.py

default_app_config = 'full.python.path.to.your.app.foo.apps.FooConfig'
Run Code Online (Sandbox Code Playgroud)

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

  • 发问者不接受他自己的答案,但这是正确的.一旦你这样做,你将'full.python.path.to.your.app.foo.apps.FooConfig'放入你的`INSTALLED_APPS`中,一切都按预期工作. (2认同)
  • 只是想提一下,一旦你添加了标签就像这样运行迁移:python manage.py makemigrations my.foo (2认同)
  • 这适用于具有现有数据库表的应用程序吗?在进行这些更改后进行迁移时,出现“依赖项引用不存在的父节点”错误。 (2认同)
  • 根据我的观察,最好避免标签名称中的点。问题在于: AUTH_USER_MODEL = 'apps.auth.User' (不起作用)。将标签名称和 AUTH_USER_MODEL 更改为 'apps_auth.User' 解决了问题。 (2认同)

小智 56

我找到了简单的解决方案.在我的情况下,在INSTALLED_APPS下添加两行后续行,

'django.contrib.foo',
Run Code Online (Sandbox Code Playgroud)

删除了一行为我解决了这个问题.

  • 很好的观察......这是一个愚蠢的错误......对我有用:) (2认同)

小智 10

我有同样的错误 - 试试这个:

在INSTALLED_APPS中,如果你包含'foo.apps.FooConfig',那么Django已经知道在应用程序中包含foo应用程序,因此不需要也包含'foo'.在INSTALLED_APPS下同时拥有'foo'和'foo.apps.FooConfig'可能是您问题的根源.


М.Б*_*.Б. 10

好吧,我创建了一个auth应用程序,并将它包含在INSTALLED_APP喜欢中src.auth(因为它在src文件夹中)并收到此错误,因为还有django.contrib.auth应用程序。所以我重命名了它authentication,问题解决了!


小智 6

在此输入图像描述 我遇到了同样的问题。这里我的应用程序名称是chat,在settings.py中,在已安装的应用程序下我编写了chat.apps.ChatConfig,而我已经在底部包含了应用程序名称chat。当我删除 chat.apps.ChatConfig 时,我的问题在迁移时得到了解决。此错误可能是由于您在 settings.py 中两次定义应用程序名称 foo 的同一个实例造成的。我希望这能成功!


小智 5

请检查 settings.py 的 INSTALLED_APPS 中是否有任何重复