【问题标题】:Django modelAdmin __init__ and inlinesDjango modelAdmin __init__ 和内联
【发布时间】:2011-04-11 22:18:10
【问题描述】:

嘿,我是 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 = [] 上方抛出一个断言 (assert False, self.inlines) 时,它正确显示了内联,但内联仍然出现?即使我已经清空了列表。

帮助表示赞赏! 谢谢。

【问题讨论】:

    标签: django class admin


    【解决方案1】:

    ModelAdmins __init__ 方法 creates instances of the inline admin classes 并将它们添加到 self.inline_instances。因此,之后将 self.inlines 设置为另一个值不会改变任何内容。你应该找到this post,它处理类似问题非常有帮助!

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        相关资源
        最近更新 更多