在Django中自定义管理表单,同时也使用autodis

2024-05-15 23:50:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想修改Django内置django.contrib.auth模块的一些小细节。具体来说,我想要一个不同的表单,使用户名成为一个电子邮件字段(和电子邮件一个备用电子邮件地址)。(我不想修改auth任何多余的内容——一个简单的表单更改似乎就是所需要的。)

当我为auth使用带有自定义ModelAdminautodiscover时,我最终与auth自己的管理接口冲突,并得到一个“已注册”错误。

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

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


Tags: 模块django模型auth表单内容站点电子邮件
2条回答

以上都不是。只需使用admin.site.unregister()。以下是我最近如何在管理员中添加过滤用户的方法(n.b.在Django core中,默认情况下,在用户模型上添加过滤用户的方法;这里仍然是一个示例),一切尽可能简单:

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)

我认为使用自定义的auth后端来实现这一点可能更容易,因此不需要自定义的ModelAdmin。

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

相关问题 更多 >