Django中UserAdmin里的add_fieldsets属性作用是什么?
关于Django UserAdmin中
add_fieldsets属性的解释 嘿,我来给你把这个add_fieldsets讲明白——这可是自定义Django用户模型时的关键配置项!
首先得和它的兄弟fieldsets对比着看:
fieldsets用来控制Django Admin中编辑已有用户页面的字段分组与布局,你代码里的fieldsets就把邮箱、个人信息、权限等内容分成了不同区块,方便编辑时查看修改。- 而
add_fieldsets是专门针对创建新用户页面的配置!它决定了在Admin后台点击「添加用户」时,会显示哪些字段、怎么分组、用什么样式。
结合你贴的代码来看:
class UserAdmin(UserAdmin): """Define admin model for custom User model with no email field.""" fieldsets = ( (None, {'fields': ('email', 'password')}), ('Personal info', {'fields': ('first_name', 'last_name')}), ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), ('Important dates', {'fields': ('last_login', 'date_joined')}), ('Contact info', {'fields': ('contact_no',)}), ) add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'password1', 'password2'), }), ) list_display = ('email', 'first_name', 'last_name', 'is_staff') search_fields = ('email', 'first_name', 'last_name') ordering = ('email',)
这里的add_fieldsets做了两件核心事:
- 指定添加新用户时要显示的字段:
email(替代默认的username作为登录标识)、password1和password2(Django自带的密码确认字段,确保用户输入的密码一致)。 - 给字段组加上
wide类,让表单区域更宽,提升后台操作的视觉体验。
教程里重写这个属性的原因很明确:默认Django UserAdmin是基于username创建用户的,而你参考的教程要把邮箱作为唯一登录标识,所以必须自定义添加页面的字段,移除username并替换成email,同时保留密码确认的逻辑——这就是add_fieldsets的核心价值啦。
内容的提问来源于stack exchange,提问作者Donovan Keating
相关产品推荐
相关产品推荐

