2

在第一次 HTTP GET 期间(在重新加载守护程序模式下的 WSGI 之后),admin.site.unregister 抛出 NotRegistered 异常,但 admin.site.register 抛出 AlreadyRegistered 异常(catch-22?)但是,在随后的 HTTP GET 中,一切都加载得很好,没有错误。

设置:

  • 姜戈 1.3
  • 阿帕奇 2.2
  • 中央操作系统

设置.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',
)

模型.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

2 回答 2

5

我在 freenode 的 #django 上找到了 mlvin 的答案

你在你的models.py而不是admin.py中定义它(这很好)但是如果你的代码中有任何地方在那个模型文件上导入*,它将再次执行注册调用

将属于 admin.py 的内容移动到 admin.py(来自 models.py)解决了它!不过,在我的辩护中,我继承了代码库——我不知道为什么我要把这个片段放在 models.py 而不是 admin.py 中。

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

但案件结案。

于 2012-09-13T19:10:21.350 回答
0

我的问题是:

我想用 MyUser(AbstarctUser) 自定义模型(在 model.py 中)和我的 admin.py 文件脚本中编辑用户(例如:添加手机),首先取消注册我的模型 MyUser 然后注册它,但 Django 没有注册我的自定义 MyUser 模型默认,

所以在我的情况下,不需要先取消注册我的自定义模块,只需注册就足够了。

于 2017-01-04T12:38:40.557 回答