You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin自定义User模型后密码可见未加密问题求助

解决Django自定义User模型Admin站点密码显示异常问题

你自定义了以邮箱作为用户名的User模型,但在Admin后台修改用户时出现两个问题:

  • 密码字段直接显示哈希值(未隐藏)
  • 没有默认Django Admin里的「修改密码」链接

问题出在你的UserAdmin继承了普通的admin.ModelAdmin,而非Django自带的UserAdmin——后者内置了密码字段的特殊处理逻辑(包括隐藏哈希值、生成修改密码链接)。

修复步骤

  1. 导入Django官方的UserAdmin类
  2. 修改你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:50:46