26

我想修改 Django 内置django.contrib.auth模块的一些小细节。具体来说,我想要一个不同的表单,使用户名成为电子邮件字段(并通过电子邮件发送备用电子邮件地址。(我宁愿不进行auth任何必要的修改——似乎只需要一个简单的表单更改。)

当我使用autodiscover自定义ModelAdmin的 for时,auth我最终会与auth自己的管理界面发生冲突并出现“已注册”错误。

看起来我必须创建自己的管理站点,枚举我所有的模型。它只有 18 个类,但似乎是一个 DRY 问题——每次更改都需要添加到模型自定义管理站点。

或者,我是否应该编写自己的“autodiscover带排除”版本来基本上导入除 之外admin的所有模块? auth

4

2 回答 2

53

以上都不是。只需使用 admin.site.unregister()。这是我最近在管理员的 is_active 上添加过滤用户的方式(nb 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)
于 2009-01-23T02:22:18.473 回答
2

我认为使用自定义身份验证后端执行此操作可能更容易,因此无需自定义 ModelAdmin。

我用这个片段做了类似的事情:http: //www.djangosnippets.org/snippets/74/

于 2009-01-23T11:30:25.947 回答