Django自定义UserModel添加is_admin字段后密码未哈希问题求助
解决Django自定义用户模型Admin页面密码明文存储问题
问题出在你直接用默认的admin.ModelAdmin注册自定义用户模型——它没有内置密码哈希处理逻辑。必须使用Django提供的UserAdmin类来注册,该类会自动调用密码哈希的处理流程。
具体解决步骤:
- 在
admin.py中导入UserAdmin和你的CustomUser模型 - 创建继承自
UserAdmin的自定义管理类,将额外字段is_admin添加到fieldsets(编辑用户时的字段分组)和add_fieldsets(添加用户时的字段配置)中 - 用这个自定义管理类注册
CustomUser
示例代码:
# 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')}), ('权限设置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'is_admin', 'groups', 'user_permissions')}), ('关键日期', {'fields': ('last_login', 'date_joined')}), ) # 添加用户页面的字段配置(需包含密码确认字段) add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('username', 'email', 'password1', 'password2', 'is_admin'), }), ) # 用自定义管理类注册模型 admin.site.register(CustomUser, CustomUserAdmin)
配置完成后,Admin页面添加/编辑用户时,会自动使用Django内置的用户表单处理逻辑,对输入的密码进行哈希加密,存储到数据库的就是加密后的密码。
内容的提问来源于stack exchange,提问作者user13726864
相关产品推荐
相关产品推荐

