[英]Django custom admin admin.site.register + admin.site.unregister conflicting AlreadyRegistered + NotRegistered on 1st HTTP GET (Apache + mod WSGI)
在第一個HTTP GET期間(在重新加載守護程序模式下的WSGI之后),admin.site.unregister引發NotRegistered異常,但是admin.site.register引發AlreadyRegistered異常(catch-22?)但是,在后續的HTTP GET上,一切正常,沒有錯誤。
設定:
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
我在freenode的#django上找到了mlavin的答案
您是在models.py而不是admin.py中定義的(這很好),但是如果您的代碼中有任何位置確實導入了該模型文件中的*,它將再次執行注冊調用
將admin.py中的內容移動到admin.py(從models.py)解決了! 不過,在我的辯護中,我繼承了代碼庫-我不確定為什么要將這段代碼放在models.py而不是admin.py中。
有趣的是:雖然這個問題從來沒有通過“ manage.py runserver”在本地出現,但是只有當我通過Apache + WSGI進行部署時,另一個人提到他們能夠在本地復制它。 奇怪的。
但是案件結案了。
我的問題是:
我想使用MyUser(AbstarctUser)自定義模型(在model.py中)在User(例如,添加移動設備)中進行編輯,並在admin.py文件腳本中首先注銷我的模型MyUser,然后對其進行注冊,但是Django無法注冊我的自定義MyUser模型默認,
因此,在我的情況下,無需先注銷我的自定義模塊,只需注冊就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.