Django自定义用户模型Admin创建账户显示密码及自定义字段方法
Django Admin自定义用户模型配置方案
Django内置的UserAdmin默认仅适配原生AbstractUser的字段列表,不会自动识别扩展的自定义字段,因此直接注册模型或者直接绑定默认UserAdmin都会出现功能缺失,按以下方式配置即可同时实现密码二次确认、自定义字段编辑两个需求:
不要直接注册模型,也不要直接绑定默认UserAdmin,自定义一个继承UserAdmin的管理类,重写字段集配置即可。在对应app的admin.py中写入以下代码:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import CustomUser class CustomUserAdmin(UserAdmin): # 编辑已有用户页面的字段分组 fieldsets = ( (None, {"fields": ("username", "password")}), ("基础信息", {"fields": ("first_name", "last_name", "email", "name", "surname", "account_type")}), ("权限设置", {"fields": ("is_active", "is_staff", "is_superuser", "groups", "user_permissions")}), ("时间记录", {"fields": ("last_login", "date_joined")}), ) # 新建用户页面的字段,保留内置的password1、password2实现密码二次输入校验 add_fieldsets = ( (None, { "classes": ("wide",), "fields": ("username", "password1", "password2", "name", "surname", "account_type"), }), ) # 可选:配置用户列表页展示的字段,方便后台管理 list_display = ("username", "email", "name", "surname", "account_type", "is_staff") admin.site.register(CustomUser, CustomUserAdmin)
配置注意事项
add_fieldsets中的password1、password2是UserAdmin内置的密码输入、二次确认字段,不可删除,否则新建用户时会丢失密码校验功能,无法生成符合加密规则的有效用户密码- 如果需要自定义字段在新建用户时为必填项,直接在
CustomUser模型定义中去掉对应字段的blank=True参数即可,Admin会自动做必填校验 - 你贴出的模型代码中
account_type字段定义末尾缺少闭合括号,且外键关联的模型名Locationd疑似笔误,修正后再执行迁移:
# 修正后的字段定义示例 account_type = models.ForeignKey(Location, on_delete=models.CASCADE, blank=True, null=True)
- 配置修改完成后无需执行数据库迁移,刷新Admin页面即可生效:新建用户时会同时显示密码二次输入框和所有自定义字段,编辑已有用户时也可以修改自定义字段内容。
内容的提问来源于stack exchange,提问作者Maddie Graham
相关产品推荐
相关产品推荐

