为了账号安全,请及时绑定邮箱和手机立即绑定

Django 管理员在 UserAdmin 中排除

Django 管理员在 UserAdmin 中排除

翻阅古今 2022-07-26 10:55:12
目前我有这个用户代理模型:class UserProxy(User):    class Meta:        verbose_name = 'Staff'        verbose_name_plural = 'Staffs'        proxy = True在管理员方面,我有以下管理员:class StaffAdmin(UserAdmin):    def get_queryset(self, request):        qs = super(StaffAdmin, self).get_queryset(request)        return qs.filter(is_staff=True)    exclude = ('first_name', 'last_name',)    def save_model(self, request, obj, form, change):        if request.user.is_superuser:            obj.is_staff = True            obj.save()admin.site.register(UserProxy, StaffAdmin)当我在管理员上使用任何形式的代理模型时,它会返回以下错误:“在‘UserProxyForm’中找不到键‘first_name’。选项有:date_joined、email、groups、is_active、is_staff、is_superuser、last_login、password、user_permissions、username。”我认为这很奇怪,我试图只排除is_staff,现在它返回:“在‘UserProxyForm’中找不到键‘is_staff’。选项有:date_joined、email、first_name、groups、is_active、is_superuser、last_login、last_name、password、user_permissions、username。”为什么会这样?代理模型不应该包含基本模型中的所有字段吗?
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

在阅读了 django UserAdmin 类https://github.com/django/django/blob/master/django/contrib/auth/admin.py#L45


似乎 UserAdmin 使用字段集并且不使用排除,我将 StaffAdmin 重写为:


class StaffAdmin(UserAdmin):


    def get_queryset(self, request):

        qs = super(StaffAdmin, self).get_queryset(request)

        return qs.filter(is_staff=True)


    list_display = ('username', 'email', 'is_staff')

    search_fields = ('username', 'email')

    fieldsets = (

        (None, {'fields': ('username', 'password')}),

        (_('Personal info'), {'fields': ('email',)}),

        (_('Permissions'), {

            'fields': ('is_active', 'is_staff', 'is_superuser', 'groups'),

        }),

        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),

    )


    add_fieldsets = (

        (None, {

            'classes': ('wide',),

            'fields': ('username', 'email', 'password1', 'password2', ),

        }),

    )


    def save_model(self, request, obj, form, change):

        if request.user.is_superuser:

            obj.is_staff = True

            obj.save()

admin.site.register(UserProxy, StaffAdmin)

现在我可以定义需要显示哪些字段


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号