Jay*_*Jay 2 python apache django mod-wsgi wsgi
在第一次 HTTP GET 期间(在重新加载守护进程模式下的 WSGI 之后),admin.site.unregister 抛出一个 NotRegistered 异常,但 admin.site.register 抛出一个 AlreadyRegistered 异常(catch-22?)但是,在随后的 HTTP GET 中,一切都加载得很好,没有错误。
设置:
设置.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',
)
Run Code Online (Sandbox Code Playgroud)
模型.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
Run Code Online (Sandbox Code Playgroud)
我在 freenode 的 #django 上找到了来自 mlavin 的答案
您是在 models.py 而不是 admin.py 中定义它(这很好)但是如果您的代码中有任何地方在该模型文件上导入 * 它将再次执行注册调用
将属于 admin.py 的内容移动到 admin.py(来自models.py)解决了它!不过,在我的辩护中,我继承了代码库 - 我不知道为什么我会把这个片段放在 models.py 而不是 admin.py 中。
有趣的是:虽然这个问题从未通过“manage.py runserver”在本地出现,但只有当我通过 Apache + WSGI 部署时,其他人提到他们能够在本地重现它。奇怪的。
但案子结了。
| 归档时间: |
|
| 查看次数: |
3389 次 |
| 最近记录: |