Django管理add_view / change_view为内联

时间:2017-02-10 13:48:01

标签: django django-admin

在Django管理员中,我们可以像这样覆盖ModelAdmin类中的add_view和change_view函数。

class ProductAdmin(admin.ModelAdmin)
    def add_view(self, request, form_url='', extra_context=None):

        self.readonly_fields = (...)
        //other code
        return super(ProductAdmin, self).add_view(request, form_url='', extra_context=None)
    inlines = [SubProdInLine,]

它也与上面的change_view相似。

但是,内联模型管理员不是这种情况。无论如何我们可以为下面的内联复制相同的内容吗?请注意,以下代码不起作用。我只是希望能够做类似的事情。

class SubProdInLine(admin.TabularInLine)
    def add_view(self, request, form_url='', extra_context=None):

        self.readonly_fields = (...)
        //other code
        return super(SubProdInLine, self).add_view(request, form_url='', extra_context=None)

基本上,我希望能够更改add_view中的readonly_fields。

1 个答案:

答案 0 :(得分:0)

您不应修改readonly_fields方法中的add_view - 它可能会影响其他请求。

相反,您可以覆盖get_readonlyfields。如果对象为None,则表示您正在添加新对象。

class ProductAdmin(admin.ModelAdmin)
    def get_readonly_fields(self, obj):
        if obj is None:
            # We are adding an object
            return ('field1', 'field2',)
        else:
            return self.readonly_fields

然后,您也可以为内联类重写get_readonly_fields

class SubProdAdmin(admin.TabularInLine)
    def get_readonly_fields(self, obj):
        if obj is None:
            # We are adding an object
            return ('field1', 'field2',)
        else:
            return self.readonly_fields