在 Django 中自定义管理表单,同时还使用自动发现

问题描述 投票:0回答:2

我想修改 Django 内置

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

当我将

autodiscover
ModelAdmin
的自定义
auth
一起使用时,我最终与
auth
自己的管理界面发生冲突,并收到“已注册”错误。

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

或者,我应该编写自己的“带有排除项的

autodiscover
”版本来基本上导入所有
admin
模块除了
auth

python django forms django-admin customization
2个回答
54
投票

以上都不是。只需使用 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)

2
投票

我认为使用自定义身份验证后端可能更容易做到这一点,从而消除对自定义 ModelAdmin 的需要。

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

© www.soinside.com 2019 - 2024. All rights reserved.