如何在Django 5管理后台启用自定义用户模型的密码修改功能?
解决Django 5后台自定义用户模型密码无法正确哈希的问题
问题根源在于Django admin默认的ModelAdmin不会处理密码字段的哈希逻辑,直接输入明文保存后,密码会以明文存储(而非Django要求的哈希格式),导致用户无法登录。正确的做法是使用Django自带的UserAdmin类来管理自定义用户模型,它内置了密码哈希处理逻辑。
解决步骤
- 导入必要的类
在你的admin.py文件中,导入UserAdmin和自定义用户模型:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import MyCustomUser
- 自定义Admin类(可选,若需显示自定义字段)
如果需要在后台管理中展示role、profile_photo等自定义字段,继承UserAdmin并调整字段配置:
class MyCustomUserAdmin(UserAdmin): # 调整用户详情页面的字段分组,添加自定义字段 fieldsets = UserAdmin.fieldsets + ( ("自定义信息", {"fields": ("role", "profile_photo")}), ) # 调整添加用户页面的字段,添加自定义字段 add_fieldsets = UserAdmin.add_fieldsets + ( ("自定义信息", {"fields": ("role", "profile_photo")}), )
- 注册自定义用户模型
使用UserAdmin(或自定义的MyCustomUserAdmin)注册你的用户模型:
# 若使用自定义Admin类 admin.site.register(MyCustomUser, MyCustomUserAdmin) # 若无需显示自定义字段,直接用默认UserAdmin # admin.site.register(MyCustomUser, UserAdmin)
效果说明
- 后台查看用户时,密码字段会显示为
********而非哈希值; - 管理员输入新密码保存时,系统会自动调用
set_password()方法对密码进行哈希处理; - 用户可以正常使用新密码登录。
内容的提问来源于stack exchange,提问作者Corey Manshack
相关产品推荐
相关产品推荐

