如何从内联声明中访问类实例?

时间:2016-11-16 17:21:36

标签: django django-admin

我认为最好用一个例子来理解:

Pizzas和Toppings有很多关系。我想在TabularInline中显示Pizza的配料。

class ToppingInlineAdmin(admin.TabularInline):
    model = Pizza.toppings.through
    fields = ('topping',)
    extra = 0
    if not model.topping.count():
        classes = ['collapse']

如您所见,如果披萨上没有浇头,我只想折叠表格内联。

代码model.topping.count()不起作用。错误是:

AttributeError: 'ForwardManyToOneDescriptor' object has no attribute 'count'

如果披萨没有浇头,你知道如何完成,折叠表格内联吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

首先,model应为Toppings

class ToppingInlineAdmin(admin.TabularInline):
    model = Toppings

要在InlineModelAdmin上有条件地设置类,您需要覆盖接受该对象的方法,django不提供专门用于此功能的方法,但我已覆盖get_formset作为示例

def get_formset(self, request, obj=None, **kwargs):
    if not obj or not obj.toppings.count():
        self.classes = ['collapse']
    return super(ToppingInlineAdmin, self).get_formset(request, obj=obj, **kwargs)