Django管理注册内联用户配置文件管理员出现问题

9

我目前正在进行一个Django项目。 我试图将UserProfile模型内联到我的User模型中。 在我的models.py文件中,我有:

class UserProfile(models.Model):
    '''
    Extension to the User model in django admin.
    '''
    user = models.ForeignKey(User)
    site_role = models.CharField(max_length=128, choices=SITE_ROLE)
    signature = models.CharField(max_length=128)
    position_title = models.CharField(max_length=128)
    on_duty = models.BooleanField(default=False)
    on_duty_order = models.IntegerField()

在我的admin.py文件中:

class UserProfileInline(admin.StackedInline):
    model = UserProfile

class UserAdmin(admin.ModelAdmin):
    inlines = [UserProfileInline]


admin.site.unregister(User)
admin.site.register(User, UserAdmin)

当我运行开发服务器时(是的,我已经重新启动了它),我会得到以下异常:
NotRegistered at /admin
The model User is not registered

这个异常是来自于admin.site.unregister(User)这一行代码。然而,当我将该行注释掉后,出现了以下异常:
AlreadyRegistered at /admin
The model User is already registered

我的Django设置似乎有点双向情感障碍。我花了一个小时左右研究这个问题,我拥有的代码似乎对其他人很有效。有人能解释为什么会发生这种情况吗?

谢谢, Travis

1个回答

22

我猜测你可能正在进行一些疯狂的模块导入... 或者... 你在 settings.INSTALLED_APPS 列表中存在排序问题。确保在替换默认管理员的应用程序之前,'django.contrib.auth' 出现在列表中。该列表应该是这样的:

INSTALLED_APPS = (
    # django apps first
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',

    # your stuff from here on
    'yourproject.userstuff',
)

这样,Django的应用程序会注册User模型,然后您可以使用自己的ModelAdmin取消注册并重新注册它。


我的问题是安装应用程序的顺序。(拍脑门) "傻啊!!!" 非常感谢你的帮助,Federico! - TravFisch
我自己永远不会发现这个问题。在这种情况下,Django的“未注册”异常并不是很有帮助!谢谢! - kissgyorgy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接