作为主题,我想隐藏一些字段,当用户进入“创建”时。特定型号的管理页面。
我知道更改list_display可以隐藏管理页面中的字段,但它是一个全局设置,不仅会影响'创建'管理页面,但也在 更新'管理页面。
答案 0 :(得分:2)
@admin.register(User)
class UserProfileAdmin(UserAdmin):
def get_fields(self, request, obj=None):
fields = super(UserProfileAdmin, self).get_fields(request, obj)
for field in fields:
if field == 'some_field_name' and obj is None:
continue
yield field
答案 1 :(得分:1)
从Exclude fields in Django admin for users other than superuser
复制def get_fieldsets(self, request, obj=None):
fieldsets = super(MediaAdmin, self).get_fieldsets(request, obj)
if not obj:
fieldsets = (
(u'other', {
'fields': ('media_public_id',)
}),
)
return fieldsets
答案 2 :(得分:0)
Django现在在ModelAdmin上有一个get_exclude
方法,用于以编程方式排除字段。
它将当前请求和对象(如果有)作为参数。在您的情况下,如果对象参数是“创建”页面,则该参数将为none,因此您可以像这样使用它:
class MyModelAdmin(admin.ModelAdmin):
def get_exclude(self, request, obj=None):
excluded = super().get_exclude(request, obj) or [] # get overall excluded fields
if not obj: # if it's a create, so no object yet
return excluded + ['extra_field_to_exclude']
return excluded # otherwise return the default excluded fields if any