【发布时间】:2021-01-14 10:06:20
【问题描述】:
我创建了一个 CustomUser(AbstractUser) 模型,在这个模型中我想在管理员添加用户页面中添加电子邮件 ID 字段。目前默认情况下,首先我们可以输入用户名和密码,在创建用户名和密码后,我们将被重定向到另一个电子邮件字段可用的页面我希望添加用户页面上的此电子邮件字段可以吗?
【问题讨论】:
标签: django django-admin
我创建了一个 CustomUser(AbstractUser) 模型,在这个模型中我想在管理员添加用户页面中添加电子邮件 ID 字段。目前默认情况下,首先我们可以输入用户名和密码,在创建用户名和密码后,我们将被重定向到另一个电子邮件字段可用的页面我希望添加用户页面上的此电子邮件字段可以吗?
【问题讨论】:
标签: django django-admin
在管理员 django 上已经有一个 BaseUserAdmin 这是默认的,它有 2 个部分,添加表单和更改表单,这两个表单都是从字段集(更改表单)和 add_fieldsets(添加表单)创建的
要在添加表单上添加字段或删除字段,请覆盖 BaseUserAdmin add_fieldsets:
from django.contrib.auth.admin import UserAdmin
class CustomUserAdmin(UserAdmin):
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {'fields': ('email',)}),
)
如果您使用的是自定义 ModelAdmin,它是 django.contrib.auth.admin.UserAdmin,那么你需要添加你的自定义 字段到字段集(用于编辑用户的字段)和 add_fieldsets(用于创建用户时使用的字段)
第二种方法:覆盖 add_fieldsets 属性本身:
class CustomUserAdmin(UserAdmin):
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
# overrides get_fieldsets to use this attribute when creating a user.
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'email', 'password1', 'password2'),
}),
)
文档:https://docs.djangoproject.com/en/3.1/topics/auth/customizing/#custom-users-and-django-contrib-admin
【讨论】:
在您应用的admin.py 中,创建ModelAdmin 并使用fields 属性将电子邮件字段包含在视图中。
示例:
from django.contrib import admin
from myproject.myapp.models import CustomUser
class CustomUserAdmin(admin.ModelAdmin):
fields = ('username', 'password', 'email')
admin.site.register(CustomUser,CustomUserAdmin)
【讨论】: