【问题标题】:Django 1.5 custom user model plus admin.autodiscover() breaks appDjango 1.5 自定义用户模型加上 admin.autodiscover() 中断应用程序
【发布时间】:2013-02-19 02:28:11
【问题描述】:

我在我的 Django 1.5c1 项目(目前在 github 上的 Django 1.5 分支的最新版本上运行)中有一个自定义用户模型(它实际上被命名为 User,因为我认为不需要另外命名)。 AUTH_USER_MODEL 在我的设置中正确定义,所以auth 模块可以正常工作,我可以登录等等。

但是,启用自定义用户模块后,管理站点将无法工作。当我将admin.autodiscover() 添加到我的urls.py 时,网站上的每个页面(不仅仅是管理页面)都会引发NotRegistered 异常并显示The model User is not registered。回溯显示admin.autodiscover() 正在尝试调用admin.site.unregister(User),显然是在它注册该模型之前。

我尝试将我的用户模型重命名为 User 以外的名称,但它似乎不起作用。我还尝试为该应用程序创建自己的admin.py,然后尝试在admin.autodiscover() 运行之前使用admin.py 中指定的自定义UserAdmin 模型手动注册我的自定义User 模型,但这实际上导致了单独的异常说User已经注册了。

接下来我应该怎么做才能让admin.autodiscover() 正常工作?

【问题讨论】:

    标签: python django django-admin django-authentication


    【解决方案1】:

    如果您希望自定义用户模型与管理员一起工作,您似乎需要跳过一些额外的环节。来自documentation

    ...你的用户模型必须定义一些额外的属性和方法。 这些方法允许管理员控制用户对管理员的访问 内容:

    class models.CustomUser

    is_staff 如果允许用户访问管理站点,则为真。

    is_active 如果用户帐户当前处于活动状态,则为真。

    has_perm(perm, obj=None) 如果用户具有指定的名称,则为真 权限。

    has_module_perms(app_label) 如果用户有权限则为真 访问给定应用中的模型。

    【讨论】:

      【解决方案2】:

      我使用自定义用户模型设置了一个全新的空项目并尝试重新创建这种情况,这导致了诊断:我们已将 django-usertools 包添加到项目中,该包尚未针对 Django 1.5 进行更新,并且显然与自定义用户模型冲突。从设置中的已安装应用列表中删除该软件包解决了该问题。

      【讨论】:

        猜你喜欢
        • 2013-02-24
        • 2013-03-21
        • 2014-04-05
        • 1970-01-01
        • 2013-06-20
        • 2013-06-01
        • 2013-02-13
        • 2013-04-20
        • 2013-12-13
        相关资源
        最近更新 更多