如何在Django中添加'inline = []'之前检查对象

时间:2013-12-14 21:37:33

标签: python django django-admin

我不知道如何在我的Django管理面板中进行一次自定义。

例如,我有表test和另一个表testinfo。我知道如何在admin.TabularInline表中制作testinfo test表。但是,如果id test表的TabularInline大于3,则如何检查{{1}},如果不显示?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我认为您的问题与此处讨论的问题Misleading documentation in ModelAdmin.get_inline_instances有关。所以基本上你的代码应该改为......     #假设您有一个继承自定义的BaseModelAdmin的TestInfoInline内联     #与下面类似。     class 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

希望这有助于某人...