【问题标题】:customizing django admin ChangeForm template / adding custom content自定义 django admin ChangeForm 模板/添加自定义内容
【发布时间】:2017-02-12 05:55:16
【问题描述】:

我可以在更改表单管理页面上插入(蹩脚的)静态文本,但我真的希望它使用正在编辑的当前对象的上下文!

例如,我想在 MyObject 更改表单上格式化 URL,以包含 ForeignKey 连接对象 (obj) 的 ID 作为链接。

我的管理对象:

class MyObjectChangeForm(forms.ModelForm):
    class Meta:
        model = MyObject
        fields = ('field1', 'obj',)

class MyObjectAdmin(admin.ModelAdmin):
    form = MyObjectChangeForm
    list_display = ('field1', 'obj')
    def render_change_form(self, request, context, *args, **kwargs):
        self.change_form_template = 'admin/my_change_form.html'
        extra = {'lame_static_text': "something static",}
        context.update(extra)
        return super(MyObjectAdmin, self).render_change_form(request,
            context, *args, **kwargs)

我的模板templates/admin/my_change_form.html

{% extends "admin/change_form.html" %}

{% block form_top %}
    {{ lame_static_text }}
    <a href="http://example.com/abc/{{ adminform.data.obj.id }}?"/>View Website</a>
{% endblock %}

{{adminform.data.obj.id}} 调用显然不起作用,但我想要一些类似的东西。

如何将当前对象的动态上下文插入到管理员更改表单中?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    change_view 中添加您的额外上下文

    class MyObjectAdmin(admin.ModelAdmin):
    
    # A template for a very customized change view:
    change_form_template = 'admin/my_change_form.html'
    
    def get_dynamic_info(self):
        # ...
        pass
    
    def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context['osm_data'] = self.get_dynamic_info()
        return super(MyObjectAdmin, self).change_view(
            request, object_id, form_url, extra_context=extra_context,
        )
    

    【讨论】:

    • 这可能会有所帮助,但不能说。 get_dynamic_info() 是否假设只是任意执行数据库查询?那不是我想要的。我只想要有问题的对象的数据(显然)必须以某种方式可用,因为它是一种更改形式(暗示该对象已经在数据库中)。此外,它会在模板中以{{osm_data}} 的形式访问?不清楚您在这里建议的实际解决方案是什么。
    • 您有权访问正在为其呈现更改视图的object_id。因此,您可以查询该对象并获取其相关字段 id 并将其作为extra_context 发送。是的,您可以在模板中将这些额外的上下文用作{{osm_data}}
    【解决方案2】:

    我相信您寻找的魔法变量是“原始”,它包含更改表单正在编辑的 python 对象:

    <a href="http://example.com/abc/{{ original.id }}?"/>View Website</a>
    

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 2011-01-11
      • 2013-12-30
      • 2012-03-15
      • 2011-04-25
      • 2018-10-11
      • 2013-09-06
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多