Django admin 如何根据Django admin中的用户类型排除get_fieldset()中的字段

Django admin 如何根据Django admin中的用户类型排除get_fieldset()中的字段,django-admin,Django Admin,我正在尝试使用get\u字段集来组织管理模型页面。使用fieldset是非常令人满意的,但我一直在研究如何排除某些字段。目前,我使用if条件检查用户类型,然后根据用户类型返回不同的fieldset。正因为如此,我有相同的代码需要重复。是否有办法排除get_fieldset中的几个字段 admin.py class StoreAdmin(admin.ModelAdmin): ... def get_fieldsets(self, request, obj=None):

我正在尝试使用
get\u字段集
来组织管理模型页面。使用
fieldset
是非常令人满意的,但我一直在研究如何排除某些字段。目前,我使用if条件检查用户类型,然后根据用户类型返回不同的
fieldset
。正因为如此,我有相同的代码需要重复。是否有办法排除
get_fieldset
中的几个字段

admin.py

class StoreAdmin(admin.ModelAdmin):
    ...
    def get_fieldsets(self, request, obj=None):
        fieldsets = copy.deepcopy(super(StoreAdmin, self).get_fieldsets(request, obj))
        if request.user.is_superuser:
            return (
                [
                    ('Basic Information', {
                        'fields': (
                            ('status', 'review_score', 'typ'),
                            ('businessName', 'relatedName'),
                            ('mKey'),
                        )
                    }),
                    ('Additional Options', {
                        'fields': (
                            ('affiliate_switch', 'is_affiliated', 'affiliate',),
                        )
                    }),
                ]
            )
        else:
            return (
                [
                    ('Basic Information', {
                        'fields': (
                            ('status', 'review_score', 'typ'),
                            ('businessName', 'relatedName'),
                            ('mKey'),
                        )
                    }),
                ]
            )

如果您只想排除字段,可以使用
get\u fields
,如下所示:

def get_fields(self, request, obj=None):
    fields = super(ClientAdmin, self).get_fields(request, obj)
    if obj:
        fields_to_remove = []
            if request.user.is_superuser:
                fields_to_remove = ['field1', 'field2', 'etc', ]
            for field in fields_to_remove:
                fields.remove(field)
        return fields
编辑: 相同的逻辑可用于
get\u字段集

我的解决方法:

def get_fieldsets(self, request, obj=None):
   fieldsets = super(AccountInline, self).get_fieldsets(request, obj)
   fields_to_remove = ['field1', 'field2', 'etc', ]
   if request.user.is_superuser:
      # select your way, my:[3][1]
      fieldsets[3][1]['fields'] = tuple(x for x in fieldsets[3][1]['fields'] if not x in fields_to_remove)
   return fieldsets

你能解释一下我如何从
字段集中删除内容吗?与
字段
不同,
字段集
具有不同的格式。正如您在原始帖子上看到的返回值,它不是普通的列表格式。我试图用
字段集
的格式应用你的答案,但我仍然坚持这样做。