继承AbstractUser后如何在Django管理面板启用管理员改密码功能?
恢复Django Admin中自定义User模型的密码修改功能
当你继承AbstractUser自定义User模型后,直接用admin.site.register(User)注册会丢失默认UserAdmin提供的密码修改功能——因为密码修改的专属逻辑是封装在官方UserAdmin类里的。按以下步骤就能恢复该功能:
步骤1:修改admin.py,继承UserAdmin并注册
替换原admin.py代码为以下内容:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User # 自定义Admin类,继承官方UserAdmin以复用密码修改逻辑 class CustomUserAdmin(UserAdmin): # 可按需添加自定义字段到用户列表展示 list_display = ('username', 'email', 'first_name', 'last_name', 'numero_de_empleado', 'is_staff') # 将自定义字段加入编辑页面的字段组 fieldsets = UserAdmin.fieldsets + ( (None, {'fields': ('numero_de_empleado',)}), ) # 用自定义Admin类注册User模型 admin.site.register(User, CustomUserAdmin)
步骤2:验证效果
重启Django服务后,进入Admin面板编辑用户,就能看到原本的密码修改选项(通常是一个独立的「修改密码」按钮,跳转至专属的密码修改页面)。
补充说明
- 官方
UserAdmin已经内置了密码修改的视图、表单及权限控制逻辑,继承它就能直接复用这些功能。 - 如果需要对自定义字段做更多Admin配置(比如搜索、过滤),可在
CustomUserAdmin中添加search_fields、list_filter等属性实现。
内容的提问来源于stack exchange,提问作者Perla De la O
相关产品推荐
相关产品推荐

