Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用户管理中的Django管理排除_Python_Django_Django Models_Django Admin - Fatal编程技术网

Python 用户管理中的Django管理排除

Python 用户管理中的Django管理排除,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,目前我有以下用户代理模型: class UserProxy(User): class Meta: verbose_name = 'Staff' verbose_name_plural = 'Staffs' proxy = True 在管理方面,我有如下类似的管理员: class StaffAdmin(UserAdmin): def get_queryset(self, request): qs = super(S

目前我有以下用户代理模型:

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)
当我在admin上转到任何形式的代理模型时,它返回以下错误:

在“UserProxyForm”中找不到键“first_name”。选项包括: 加入日期、电子邮件、群组、是否活跃、是否工作人员、是否超级用户、, 上次登录、密码、用户权限、用户名。“

我觉得这很奇怪,我试图只排除
is_staff
,现在它返回:

在“UserProxyForm”中找不到键“is_staff”。选项包括: 加入日期、电子邮件、姓名、组、是否活动、是否超级用户、, 上次登录、上次姓名、密码、用户权限、用户名。“


为什么会这样?代理模型不应该包含基础模型中的所有字段吗

阅读django UserAdmin类之后

似乎UserAdmin使用字段集而不使用排除,我将StatAdmin重写为:

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)

现在,在阅读django UserAdmin类之后,我可以定义哪些字段需要显示

似乎UserAdmin使用字段集而不使用排除,我将StatAdmin重写为:

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)

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

你能为UserAdmin共享代码吗?UserAdmin来自
django.contrib.auth.admin
@chillarand你能为UserAdmin共享代码吗?UserAdmin来自
django.contrib.auth.admin
@chillarand