Django继承AbstractUser后如何调整Admin页面字段排序?
解决Django Admin中自定义User字段排序问题
这个问题我开发时也碰到过,Django Admin默认会把AbstractUser的自带字段排在最前面,密码字段甚至直接顶在首位,确实会让自定义字段的展示很混乱。其实只需要自定义UserAdmin类,手动控制字段的显示顺序就能搞定,具体操作步骤如下:
步骤1:导入必要模块
在你的应用的admin.py文件中,先导入基础的UserAdmin和你的自定义用户模型:
from django.contrib.auth.admin import UserAdmin from .models import CustomUser
步骤2:自定义UserAdmin类
继承默认的UserAdmin,重写fieldsets(编辑页面的字段分组)和add_fieldsets(添加用户页面的字段),把自定义字段放在最顶部的分组里:
class CustomUserAdmin(UserAdmin): # 编辑用户页面的字段分组,把自定义字段放在最前面 fieldsets = ( ('自定义用户核心信息', { 'fields': ('uid', '你的其他自定义字段1', '你的其他自定义字段2') # 替换成你的实际字段 }), ('基础个人信息', { 'fields': ('username', 'first_name', 'last_name', 'email') }), ('账户权限设置', { 'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions') }), ('系统记录日期', { 'fields': ('last_login', 'date_joined') }), ) # 添加用户页面的字段配置,同样把自定义字段放在前面 add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('uid', '你的其他自定义字段1', 'username', 'email', 'password1', 'password2'), }), )
注意:
uid是你设置的UUID主键且editable=False,在Admin页面会自动以只读形式展示,不需要额外配置。
步骤3:注册自定义UserAdmin
最后用自定义的CustomUserAdmin来注册你的用户模型:
admin.site.register(CustomUser, CustomUserAdmin)
这样配置完之后,刷新Admin页面,你就能看到自定义字段排在最顶部,布局变得清晰有序了。如果不需要分组展示,也可以直接重写fields属性,按顺序列出所有字段,但用fieldsets分组的方式更符合Admin的交互体验。
内容的提问来源于stack exchange,提问作者Point Clear Media
相关产品推荐
相关产品推荐

