如何使admin.TabularInline中的字段之一成为条件?

问题描述

有没有办法使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]