2013-12-14 27 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 

希望这可以帮助别人......

相关问题