2016-11-16 6 views
0

これは例で最もよく理解できると思います。インライン宣言内からクラスインスタンスにアクセスするにはどうすればよいですか?

ピザとトッピングには多少の関係があります。私は、TabularInlineにピザのトッピングを表示したい。

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

まず、modelToppingsである必要があります。

class ToppingInlineAdmin(admin.TabularInline): 
    model = Toppings 

は条件付きでオブジェクトを取得するメソッドをオーバーライドする必要があなたのInlineModelAdmin上のクラスを設定するには、Djangoは特に、この機能のための方法を提供していませんが、私は

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) 
+0

感謝の例としてget_formsetをオーバーライドしていますあなたは非常に説明のために。それは有り難いです。 –

関連する問題