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

自定义User模型下Django Admin编辑用户免密码的方案咨询

解决Django Admin编辑自定义User时密码必填且明文存储的问题

我来帮你搞定这个问题!你遇到的核心问题是自定义的UserAdmin继承了admin.ModelAdmin,而不是Django auth模块自带的UserAdmin——这个默认的UserAdmin已经帮我们封装好了密码字段的加密和编辑逻辑:比如编辑用户时无需重新输入密码,仅在创建新用户时要求填写,并且会自动加密存储密码。

解决方案步骤

  1. 导入Django官方的UserAdmin类
  2. 让你的自定义UserAdmin继承这个官方类,而非基础的ModelAdmin
  3. 配置fieldsets(编辑页面字段分组)和add_fieldsets(创建页面字段分组),把你新增的自定义字段加入到Admin页面中

修改后的admin.py代码

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin  # 导入官方UserAdmin
from .models import User

class CustomUserAdmin(UserAdmin):
    # 保留你原本配置的列表展示字段
    list_display = ["username", "email", "allow_emails", "accept_privacy_policy", "date_joined", "is_staff", "is_superuser"]
    
    # 扩展编辑页面的字段分组,将自定义字段加入
    fieldsets = UserAdmin.fieldsets + (
        ('自定义用户设置', {'fields': ('allow_emails', 'accept_privacy_policy')}),
    )
    
    # 扩展创建新用户页面的字段分组,确保自定义字段能在创建时设置
    add_fieldsets = UserAdmin.add_fieldsets + (
        ('自定义用户设置', {'fields': ('email', 'allow_emails', 'accept_privacy_policy')}),
    )

# 注册自定义的UserAdmin
admin.site.register(User, CustomUserAdmin)

为什么这样能解决问题?

  • 继承官方UserAdmin后,密码字段会自动使用Django内置的处理逻辑:
    • 编辑用户时,密码字段会显示为********,无需重新填写,提交时不会覆盖原有加密密码
    • 创建新用户时,密码字段为必填项,提交后会自动加密存储到数据库
  • 通过fieldsets和add_fieldsets,我们既保留了默认User模型的所有字段逻辑,又能在Admin页面中展示和编辑自己新增的字段

这样修改后,你就能在Admin后台编辑用户时无需填写密码,且密码始终保持加密存储状态啦!

内容的提问来源于stack exchange,提问作者Zuzana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:27:38