You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:54:13