Django Admin自定义User模型后密码可见未加密问题求助
解决Django自定义User模型Admin站点密码显示异常问题
你自定义了以邮箱作为用户名的User模型,但在Admin后台修改用户时出现两个问题:
- 密码字段直接显示哈希值(未隐藏)
- 没有默认Django Admin里的「修改密码」链接
问题出在你的UserAdmin继承了普通的admin.ModelAdmin,而非Django自带的UserAdmin——后者内置了密码字段的特殊处理逻辑(包括隐藏哈希值、生成修改密码链接)。
修复步骤
- 导入Django官方的
UserAdmin类 - 修改你的
UserAdmin继承自这个类,而非admin.ModelAdmin
修改后的admin.py代码如下:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User @admin.register(User) class UserAdmin(UserAdmin): fieldsets = ( (None, {"fields": ("email", "password")}), (("Personal info"), {"fields": ("first_name", "last_name")}), ( ("Permissions"), { "fields": ( "is_active", "is_staff", "is_superuser", "groups", "user_permissions", ), }, ), (("Important dates"), {"fields": ("last_login", "date_joined")}), ) add_fieldsets = ( ( None, { "classes": ("wide",), "fields": ("email", "password1", "password2"), }, ), ) list_display = ("email", "is_active", "is_staff", "is_superuser") list_filter = ("is_active", "is_staff", "is_superuser") search_fields = ("email",) ordering = ("email",) filter_horizontal = ("groups", "user_permissions",) # 指定自定义的用户名字段,确保Admin逻辑匹配 USERNAME_FIELD = 'email'
原理说明
Django自带的UserAdmin针对密码字段做了专属处理:
- 使用
PasswordWidget渲染,隐藏哈希值,显示为不可编辑的占位文本 - 自动添加「修改密码」的跳转链接,引导到专门的密码修改页面
- 处理密码创建时的验证逻辑(比如两次输入一致)
继承这个类后,你的自定义User模型就能获得和默认User模型完全一致的Admin密码处理体验。
内容的提问来源于stack exchange,提问作者Omid Shojaee
相关产品推荐
相关产品推荐

