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