如何使 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]