问题:自定义django admin ChangeForm模板/添加自定义内容

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

例如,我想在 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}}调用显然不起作用,但我想要一些类似的东西。

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

解答

在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,
        )
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐