Django 1.11中为自定义用户在Admin添加额外字段失败问题
解决Django 1.11自定义用户模型Admin添加表单不显示自定义字段的问题
这个问题的核心原因是:Django 1.11版本的UserAdmin默认配置了add_fieldsets,它只包含用户名和密码相关字段。哪怕你自定义了add_form,Admin添加页面还是会按照add_fieldsets的设置来渲染表单,所以你的role字段才没显示出来。
你只需要在CustomUserAdmin中重写add_fieldsets,把自定义的role字段添加进去即可,修改后的admin.py代码如下:
# admin.py from django.contrib import admin from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.admin import UserAdmin from .models import CustomUser class CustomUserCreationForm(UserCreationForm): class Meta(UserCreationForm.Meta): model = CustomUser fields = UserCreationForm.Meta.fields + ('role',) class CustomUserAdmin(UserAdmin): add_form = CustomUserCreationForm # 重写add_fieldsets,将role字段加入添加表单 add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('username', 'password1', 'password2', 'role'), }), ) admin.site.register(CustomUser, CustomUserAdmin)
修改完成后,再进入Admin的添加用户页面,就能看到role字段出现在表单里了。
另外,如果你希望在用户详情编辑页面也能看到并修改role字段,还可以额外重写fieldsets属性,把role加入到默认的字段集合中:
class CustomUserAdmin(UserAdmin): add_form = CustomUserCreationForm add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('username', 'password1', 'password2', 'role'), }), ) # 重写fieldsets,让编辑页面显示自定义的role字段 fieldsets = UserAdmin.fieldsets + ( ('自定义用户信息', {'fields': ('role',)}), )
内容的提问来源于stack exchange,提问作者Demetris
相关产品推荐
相关产品推荐

