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

2022-01-25 00:00:00 python django django-admin

问题描述

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

I'm able to insert (lame) static text onto the change form admin page, but I'd really like it to use the context of the current object being edited!

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

For instance, I want to format on the MyObject change form a URL to include the ID from a ForeignKey connected object (obj) as a link.

我的管理对象:

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

The {{adminform.data.obj.id}} call obviously doesn't work, but I'd like something along those lines.

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

How do I insert dynamic context from the current object into the admin change form?


解决方案

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

相关文章