2012-03-01 50 views
2

我在開發環境中遇到此錯誤。我花了很長時間試圖弄清楚這一點,特別是因爲我想象它正在把我凝視在臉上。我對我的一個模型創建了一個新的ModelForm,然後開始出現這個錯誤。它會消失,如果我註釋掉我的models.py文件中的「admin.site.register(ModelName)」行,但隨後我無法檢查管理站點中的數據了...django錯誤:「Caught AlreadyRegistered」?只註冊一次模型

這裏是錯誤:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/admin/ 

Django Version: 1.3.1 
Python Version: 2.7.2 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'azcerts.certmanager'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.middleware.csrf.CsrfResponseMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    101.        request.path_info) 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in resolve 
    250.    for pattern in self.url_patterns: 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _get_url_patterns 
    279.   patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _get_urlconf_module 
    274.    self._urlconf_module = import_module(self.urlconf_name) 
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module 
    35.  __import__(name) 
File "C:\Users\ntagg\Code\azcerts\urls.py" in <module> 
    3. from certmanager.views import addone 
File "C:\Users\ntagg\Code\azcerts\certmanager\views.py" in <module> 
    4. from forms import CertForm 
File "C:\Users\ntagg\Code\azcerts\forms.py" in <module> 
    4. from certmanager.models import UserProfile, Cert 
File "C:\Users\ntagg\Code\azcerts\certmanager\models.py" in <module> 
    52. admin.site.register(UserProfile) 
File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py" in register 
    85.     raise AlreadyRegistered('The model %s is already registered' % model.__name__) 

Exception Type: AlreadyRegistered at /admin/ 
Exception Value: The model UserProfile is already registered 

這裏的models.py:

#models.py 
from django.db import models 
from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.localflavor.us.models import USStateField 

class Cert(models.Model): 
    # My fields are here... 

    def __unicode__(self): 
     return self.fieldname 

class UserProfile(models.Model): 
    # My fields are here... 

    def __unicode__(self): 
     return self.fieldname 

admin.site.register(UserProfile) 
admin.site.register(Cert) 

回答

5

不要在您的models.py註冊你的模型,創建你的應用的admin.py,並做到這一點那裏。

# admin.py 
from django.contrib import admin 
from myapp.models import Cert, UserProfile 
admin.site.register(Cert) 
admin.site.register(UserProfile) 

說明:與路徑azcerts.certmanager.models一次(因爲它是在你的INSTALLED_APPS),並再次與路徑certmanager.models(模塊中:

當您創建模型的形式,Django的是導入您models.py兩次您在哪裏定義模型表單)。 Django第二次導入models.py,它試圖再次註冊模型,並給出了錯誤。

通過移動寄存器命令到admin.py,您確保模型將會只登記一次。

這是一個有點亂是models.py可以在這樣兩種不同的路徑依賴進口。 Django 1.4中的默認項目佈局已經改變,這將防止這樣的陷阱。

+0

野趣,將嘗試了這一點 – icn 2012-03-01 20:40:43

+0

太謝謝你了!這立即修復它。 – ntaggart 2012-03-01 20:43:27