我想修改 Django 内置
django.contrib.auth
模块的一些小细节。具体来说,我想要一个不同的表单,使用户名成为电子邮件字段(并通过电子邮件发送备用电子邮件地址。(我宁愿不修改auth
)任何不必要的修改——一个简单的表单更改似乎就足够了。 )
当我将
autodiscover
与 ModelAdmin
的自定义 auth
一起使用时,我最终与 auth
自己的管理界面发生冲突,并收到“已注册”错误。
看起来我必须创建自己的管理站点,枚举我的所有模型。它只有 18 个类,但似乎是一个 DRY 问题 - 每个更改都需要添加到模型和 添加到自定义管理站点。
或者,我应该编写自己的“带有排除项的
autodiscover
”版本来基本上导入所有admin
模块除了auth
?
以上都不是。只需使用 admin.site.unregister()。以下是我最近在管理中添加对 is_active 过滤用户的方法(n.b. is_active 过滤现在默认在 Django 核心中的用户模型上;仍然可以在这里作为示例),所有 DRY 都可以:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
list_filter = UserAdmin.list_filter + ('is_active',)
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
我认为使用自定义身份验证后端可能更容易做到这一点,从而消除对自定义 ModelAdmin 的需要。
我对这个片段做了类似的事情: http://www.djangosnippets.org/snippets/74/