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