如何使 admin.TabularInline 中的字段之一成为条件字段?
How can I make one of the fields in admin.TabularInline conditional?
有没有办法让 admin.TabularInline
中的字段之一成为条件?
例如
class ParameterInline(admin.TabularInline):
form = ParameterForm
fields = ["ParameterA", "ParameterB"]
如果我想仅在其他设置为 True
时显示 ParameterB
怎么办?
提前致谢。
您可以通过覆盖 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, request, 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]
有没有办法让 admin.TabularInline
中的字段之一成为条件?
例如
class ParameterInline(admin.TabularInline):
form = ParameterForm
fields = ["ParameterA", "ParameterB"]
如果我想仅在其他设置为 True
时显示 ParameterB
怎么办?
提前致谢。
您可以通过覆盖 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, request, 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]