0

我正在尝试覆盖 Django 3.2 管理类中的 get_form 函数。我为特定用户定义了一个自定义权限,该用户只能查看模型的某些已定义字段。它工作得很好,但是当我尝试使用未经许可的用户导航到对象的更改表单时,我无法以超级用户身份查看更改表单,直到其他用户关闭更改表单。所以基本上,覆盖 get_form 方法不会同时为不同类型的用户工作。顺便说一句,我没有任何定义的视图,因为我只使用管理模板作为视图。

我是 django 的新手,所以我不知道我这样做是否正确......

这是我创建并覆盖 get_form 方法的管理类(例如,如果用户没有自定义权限,我不想显示姓氏):

class HumanAdmin(admin.ModelAdmin):
        fieldsets = (
                ('Fields 1', {'fields': ('id','name', 'surname'),}),
        )
        def get_form(self, request, obj=None, **kwargs):
            if request.user.has_perm('app_name.custom_permission'):
                self.fieldsets[0][1]["fields"] = ('id','name', 'surname')
                form = super(InventoryAdmin,self).get_form(request, obj, **kwargs)
            else:
                self.fieldsets[0][1]["fields"] = ('id','name') #I do not want to see if user does not have custom permission
                form = super(InventoryAdmin,self).get_form(request, obj, **kwargs)
            return form

因此,当我从没有自定义权限的用户和同时从具有自定义权限的用户打开更改表单时,我收到了错误

KeyError: "Key 'surname' not found in 'HumanForm'." 
in .../site-packages/django/forms/forms.py, line 155, in __getitem__

在具有自定义权限的用户屏幕中...

4

0 回答 0