Django modelAdmin __init__和内联

时间:2010-09-13 23:10:29

标签: django class admin

嘿,我是Django的新手,我正在寻找动态编辑管理类变量(完整的想法是隐藏添加的内联,只显示编辑,但我在这里提炼问题)。

有人可以解释为什么这不起作用吗?

class dbTablePermissionInline(admin.TabularInline):
    model = dbPermission

class adminDbTable(admin.ModelAdmin):

    inlines = [
        dbTablePermissionInline,
    ]

    def __init__(self, *args, **kwargs):
        super(adminDbTable,self).__init__(*args, **kwargs)
        self.inlines = []

当我在self.inlines = []之上抛出一个断言(断言False,self.inlines)时,它正确地显示了内联,但内联仍然出现?即使我把清单清空了。

帮助赞赏! 感谢。

2 个答案:

答案 0 :(得分:11)

ModelAdmin __init__方法creates instances of the inline admin classes并将其添加到self.inline_instances。因此,之后将self.inlines设置为其他值不会改变任何内容。您应该找到处理类似问题的this post非常有用!

__init__中设置这样的值也没有意义,因为Modeladmin实例只创建一次并且可能会持续多次请求!

答案 1 :(得分:1)

我建议制作一个自定义模板,当操作是“创建新foo”时隐藏内联。

管理模板很容易覆盖全局或每个对象。它比覆盖__init__()中的ModelAdmin方法和属性要好得多。