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

S.L*_*ott 26 python forms django customization django-admin

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

当我使用autodiscover自定义的时候ModelAdmin,auth我最终会与auth自己的管理界面冲突,并获得"已经注册"的错误.

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

或者,我应该编写自己的" autodiscoverwith exclusions" 版本来基本导入所有admin模块,除了 auth

Car*_*yer 51

以上都不是.只需使用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)
Run Code Online (Sandbox Code Playgroud)

  • 我注意到,在将此unregister()调用添加到我的代码后,我不得不手动杀死并重新启动我的开发服务器,然后Django"看到"我所做的更改.这让我浪费了15分钟试图弄清楚为什么unregister()不起作用.这终于把我带到了这个Stack Overflow问题,在那里我发现我正在做的事情*应该起作用.:-) (2认同)