2012-09-13 102 views
2

冲突的AlreadyRegistered + NotRegistered在第一个HTTP GET(之后在守护进程模式的WSGI重新加载),管理。 site.unregister抛出一个NotRegistered异常,但admin.site.register抛出一个异常AlreadyRegistered(22条军规?)然而,在随后的HTTP的GET,一切加载只是没有错误的罚款。Django的自定义管理admin.site.register + admin.site.unregister 1日HTTP GET(阿帕奇+ MOD WSGI)

设置:

  • Django的1.3
  • 阿帕奇2.2
  • CentOS的

settings.py:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    #'django.contrib.sites', #(this didn't seem to make a difference) 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    # Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    'django.contrib.admindocs', 
    'base', 
    'sample', 
    'reports', 
    'south', 
) 

models.py:

from django.db import models 
from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin 

class Company(models.Model): 
    name = models.CharField(max_length=256) 

class CompanyUser(models.Model): 
    company = models.ForeignKey(Company) 
    user = models.OneToOneField(User) 

class CompanyUserInline(admin.StackedInline): 
    model = CompanyUser 
    max_num = 1 
    can_delete = False 

class CompanyUserAdmin(AuthUserAdmin): 
    inlines = [ CompanyUserInline ] 

# STUCK HERE !! 
try: 
    admin.site.unregister(User) 
    # throws NotRegistered at/The model User is not registered 
except: 
    admin.site.register(User, CompanyUserAdmin) 
    # throws AlreadyRegistered at/The model User is already registered 

回答

4

我找到了答案,从mlavin freenode上的#django

你在你的models.py而不是admin.py(这是 罚款)确定这一点,但如果你在你的代码中的任何地方这确实导入*上 该模型文件,它将执行寄存器再次呼吁

移动在admin.py属于什么admin.py中(从models.py)解决了这个问题!在我的辩护中,我继承了代码库 - 我不知道为什么我会将这个片段放在models.py而不是admin.py中。

有趣的是:虽然这个问题从来没有通过“manage.py runserver”在本地突然出现,但只有当我通过Apache + WSGI进行部署时,另一个人提到他们能够在本地重现它。奇怪的。

但结案。

+0

通过谷歌(小世界)陷入了这个问题。感谢您回答您自己的问题。 –

+0

明智的答案。我不能给这个+ n。 :( – curlyreggie

0

我的问题是:

我想在用户编辑(例如:添加移动)与MYUSER(AbstarctUser)自定义模型(在model.py)和我的admin.py文件脚本首先我注销模型MYUSER然后注册它,但Django的默认情况下未登记自己的定制MYUSER模型,

所以在我的情况下,没有必要注销我的自定义模块,第一只登记就足够了。