2013-12-14 71 views

回答

1

ModelAdmina method called get_inline_instances()可以用來實現這種效果。

class TestAdmin(admin.ModelAdmin): 
    def get_inline_instances(self, request, obj=None): 
     if obj.id > 3: 
      self.inlines = [TestInfoInline, ] 
     else: 
      self.inlines = [] 
     return super(TestAdmin, self).get_inline_instances(request, obj) 

第二個例子 - 效果與原來一模一樣:

class TestAdmin(admin.ModelAdmin): 
    inlines_foo = [] 
    inlines_bar = [TestInfoInline, ] 

    def get_inline_instances(self, request, obj=None): 
     self.inlines = self.inlines_foo if obj.id <= 3 else self.inlines_bar 
     return super(TestAdmin, self).get_inline_instances(request, obj) 
+0

ID不工作,我總是得到'不受約束的方法必須使用TestInfoInline實例作爲第一個參數調用get_formset()(而不是WSGIRequest實例)。該怎麼辦? –

+0

對不起,那完全是我的錯。我更新了我的答案。 –

+0

同樣,我遇到了問題...每次我提到頁面時,我都會得到2個新的TestInfoInline表單集合 –

0

嗯,我認爲你的問題是關係到這裏Misleading documentation in ModelAdmin.get_inline_instances討論了這個問題。所以基本上你的代碼應該改成類似於...... #假設你有一個TestInfoInline內聯繼承自一個BaseModelAdmin定義的 ##類似於以下。 類TestInfoInline(admin.StackedInline): #這裏有關的東西... ...

class TestAdmin(admin.ModelAdmin): 
    def get_inline_instances(self, request, obj=None): 
     inlines = [] 
     if obj.id > 3: 
     for inline_class in self.inlines: 
      # Instanciate inline object 
      inline = inline_class(self.model, self.admin_site) 
      inlines.append(inline) 
     return inlines 

希望這可以幫助別人......

相關問題