2014-06-20 47 views
37

在升級到1.7的Django我越來越從./manage.py如何在Django 1.7中解析「django.core.exceptions.ImproperlyConfigured:應用程序標籤不唯一,重複:foo」?

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

什麼問題,如何解決它下面的錯誤信息?

回答

61

問題是,隨着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) 

# foo/__init__.py 

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

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

+2

發問者沒有接受他自己的回答,但它是正確的。一旦你這樣做了,你把'full.python.path.to.your.app.foo.apps.FooConfig'放到你的'INSTALLED_APPS'中,一切都按預期工作。 – Brett

+0

對我不起作用 –

+1

只是想提一提,添加標籤後,運行如下所示的遷移:python manage。py makemigrations my.foo – 82din

-19

如果你想要回舊版本,命令

pip install django==1.6.7 
+0

這並不真正給出答案。問題是升級出了什麼問題,以及如何解決升級問題。回滾到舊版本可以避免這個問題,但不能解決問題。 – anaximander

+0

@anaximander - 他們試圖幫助,因此這是一個答案,即使它是一個窮人。如果你不喜歡它,請下載它,但不要標記它。當答案不是答案時,請參閱您的答案在另一個城堡中:http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer- not-an-answer – ArtOfWarfare

+2

關於「我該如何在C#中執行X操作?」的問題?有人迴應「使用Java」,這將被視爲「不是答案」。同樣的道理,當問題是「如何在1.7版本中解決這個問題」時,我認爲「使用版本1.6.7」也不是答案。答案是:「如果你想[回到]舊版本」。問題是「如何移動到新版本」。我認爲這很不言而喻。 – anaximander

3

由於therefromhere說,這是一個新的Django 1.7 feature增加了一個種類的應用程序必須是「應用程序註冊表」確定唯一(不僅有不同的python pathes)。

name屬性是Python路徑(唯一的),但label也應該是唯一的。例如,如果您有一個名爲'admin'的應用程序,那麼您必須定義名稱(name ='python.path')以及必須也是唯一的標籤(label ='my admin'),或者如上所述放置完整的python路徑總是唯一的)。

37

我發現這個簡單的解決方案。在我的情況如下行下添加兩次INSTALLED_APPS

'django.contrib.foo', 

刪除一行修復該問題對我來說。

+0

不錯的觀察...這是一個愚蠢的錯誤..爲我工作:) – jax

3

我有同樣的錯誤 - 嘗試這個辦法:在INSTALLED_APPS

,如果包括「foo.apps.FooConfig」,那麼Django的已經知道,包括在應用程序中富應用程序,因此存在沒有必要還包括'foo'。在INSTALLED_APPS下有'foo'和'foo.apps.FooConfig'可能是問題的根源。

1

好吧,我創建auth應用程序,以及我在INSTALLED_APPsrc.auth包括它(因爲它在src文件夾),我得到這個錯誤,因爲django.contrib.auth應用程序也。所以我改名爲authentication,問題解決了。

相關問題