Django自定义UserAdmin报admin.E012字段重复错误如何解决?
错误原因
admin.E012错误的触发条件是同一个字段在Django Admin的fieldsets配置中被多次定义,和你给mobileNumber设置的unique=True属性没有关联。
排查&修复步骤
1. 修复显式重复的字段配置
你自定义的fieldsets中,name、familyName两个字段同时出现在第1个无标题分组、第2个「User information」分组中,属于重复配置,删掉第二个分组里的这两个重复字段即可:
fieldsets = ( (None, {'fields': ('name', 'familyName')}), # 移除了本行中重复的name、familyName字段 ('User information', {'fields': ('email', 'mobileNumber', 'password', 'nationalCode')}), ('Permissions', {'fields': ('is_staff', 'is_active', 'is_superuser', 'groups')}), )
2. 修复继承带来的隐式重复
你继承了Django自带的UserAdmin,父类默认已经内置了fieldsets配置,其中默认的Permissions分组已经包含is_staff、is_active、is_superuser、groups、user_permissions字段,和你自己定义的Permissions分组字段重复。如果需要完全自定义字段展示,直接保留上面修改后的fieldsets配置即可,无需额外继承父类的字段配置。
3. 修复add_fieldsets的格式错误
你当前的add_fieldsets写法不符合要求,它需要是嵌套元组结构,你少写了外层括号,会导致Django把它解析成两个独立的分组,也可能触发字段重复报错,修改为:
add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'name', 'familyName', 'mobileNumber', 'password', 'nationalCode') }), )
修改完成后重启Django服务,报错就会消失,Admin后台字段展示也会恢复正常。
内容的提问来源于stack exchange,提问作者user16858520
相关产品推荐
相关产品推荐

