Django仅在CREATE对象管理页面

时间:2016-11-03 06:28:42

标签: django

作为主题,我想隐藏一些字段,当用户进入“创建”时。特定型号的管理页面。

我知道更改list_display可以隐藏管理页面中的字段,但它是一个全局设置,不仅会影响'创建'管理页面,但也在 更新'管理页面。

3 个答案:

答案 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