【问题标题】:Django admin - How do I display a list of Model X on Model Y 'add / change' page without a relationship?Django admin - 如何在 Model Y 的“添加/更改”页面上显示 Model X 的列表而没有关系?
【发布时间】:2012-02-22 12:39:46
【问题描述】:

所以我有 2 个模型,BlogPost 和 BlogImage - 图片在管理员中,以便在没有 FTP 的情况下上传,以及相关元数据(标题等)但是,我不希望 BlogPosts 之间有任何数据库链接和 BlogImages - 它们将作为 HTML 标记输入到正文中 - 但我想在添加新的 BlogPost 时参考一些东西。

有没有办法在添加 BlogPost 表单上显示 BlogImage 对象列表?我尝试过为 BlogPost 覆盖 change_list.html 模板,但我不确定如何为其提供额外的数据。谢谢。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您可能正在寻找extra_context

    class MyModelAdmin(admin.ModelAdmin):
    
        def change_view(self, request, object_id, extra_context=None):
            my_context = {
                'foo': 'bar',
            }
            return super(MyModelAdmin, self).change_view(request, object_id,
                extra_context=my_context)
    

    【讨论】:

    • 谢谢,这看起来正是我所需要的。我尝试了这个例子,但我可能很愚蠢 - 我将如何从模板中访问 my_context 中提供的附加数据?我试过 {{ foo }}。
    • @dan-klasson:这是添加上下文的不好方法。通常,您想要执行类似extra_context = extra_context or {} 的操作,然后在将其传递回super 之前根据需要向其中添加其他密钥。按照您的做法,任何现有的 extra_context 都会被覆盖,如果该方法在子类中被覆盖,这将是一个非常令人困惑的错误。
    • 我是否需要做一些特别的事情才能从模板中访问extra_context
    • @Chris:这是来自文档(我也链接到)。我只是从那里复制的。但你是对的,这不是一个很好的方法。
    • @Tom: {{ foo }} 应该可以。您是否正确覆盖了模板?
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2023-01-18
    • 2019-01-01
    • 2018-06-13
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多