如何在 django 管理页面中的每一行的列表页面上放置一个按钮

Posted

技术标签:

【中文标题】如何在 django 管理页面中的每一行的列表页面上放置一个按钮【英文标题】:How to put a button on List page for each row in django admin page 【发布时间】:2020-09-14 17:53:15 【问题描述】:

我想为每一行添加一个按钮,如图所示的按钮位置,该按钮应弹出相同模式的字段内容或我插入的任何内容以显示。

【问题讨论】:

【参考方案1】:

这实际上很容易做到:) 虽然取决于你想让按钮做什么,它可能会变得更复杂一些。您可以在列表视图中包含任何您想要的内容,只需创建一个返回您想要插入的任何内容的方法,然后在list_display 中列出它。例如:

class MyModelAdmin(admin.ModelAdmin):
    list_display = (
        "post_title",
        ...
        "my_button_field",
    )

    def my_button_field(self, obj):
        # obj is the particular instance of the object representing a particular row
        return obj.property

对于按钮,您需要使用format_html。这会将字符串的相关部分标记为安全,使其显示为 HTML 按钮,并转义其他部分以防止各种安全问题。

它看起来像这样:

from django.utils.html import format_html

class MyModelAdmin(admin.ModelAdmin):
    list_display = (
        "post_title",
        ...
        "my_button_field",
    )

    def my_button_field(self, obj):
        return format_html(
            "<button onclick=`doSomething()`></button>", 
            obj.id, 
            obj.some_property
        )

object.idobject.some_property 的值将被插入到占位符中。

当然,您需要为doSomething 添加javascript,有几种方法可以做到这一点,但您可以找到更多here。如果你想要的可以通过锚来实现,使用&lt;a&gt; 标签可能更容易,这样你就不必费心任何额外的 javascrpt。

【讨论】:

@mani 不用担心。欢迎来到 SO。如果您对答案感到满意,请点赞并将其标记为已接受:)

以上是关于如何在 django 管理页面中的每一行的列表页面上放置一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

在编辑页面的表格中的每一行中设置下拉列表的选定值

Django 管理员。当对象具有布尔字段== True时,如何为列表视图中的每一行添加背景颜色?

加速 Django 管理员删除页面

如何在 Django 管理列表显示页面中编辑 ManyToManyField?

Django:如何通过单击一行来更改页面?

Django将硬编码的href链接添加到管理模型的表单视图页面