问题描述
有没有办法使admin.TabularInline
中的一个字段成为条件字段?
例如
class ParameterInline(admin.TabularInline):
form = ParameterForm
fields = ["Parametera","ParameterB"]
如果仅在设置了其他ParameterB
的情况下才想显示True
,怎么办?
谢谢。
解决方法
您可以通过覆盖get_fields
方法来实现此目的:
class ParameterInline(admin.TabularInline):
form = ParameterForm
fields = ["ParameterA"]
def get_fields(self,request,obj=None):
fields = super(ParameterInline,self).get_fields(request=request,obj=obj)
if True:
return fields + ['ParameterB']
return fields
,
最后,我设法解决了这个问题,尽管我感觉这不是最有效的方法。
我现在有两个这样的内联,只有一个区别
class ParameterInlineA(admin.TabularInline):
form = ParameterForm
fields = ["ParameterA","ParameterB"]
class ParameterInlineB(admin.TabularInline):
form = ParameterForm
fields = ["ParameterA"]
和以下函数可在整个内联之间动态交换;
def get_inline_instances(self,obj=object):
inliness = self.inlines
if obj is not None:
inlines = inliness
obj = <registeredModel>.objects.get(id = obj.id)
if obj.<attributeToSortBy> is None:
inlines.remove(ParameterInlineA)
inlines.append(ParameterInlineB)
return [inline(self.model,self.admin_site) for inline in inlines]
else:
inlines.append(ParameterInlineA)
inlines.remove(ParameterInlineB)
return [inline(self.model,self.admin_site) for inline in inlines]