如何在 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.id
和 object.some_property
的值将被插入到占位符中。
当然,您需要为doSomething
添加javascript,有几种方法可以做到这一点,但您可以找到更多here。如果你想要的可以通过锚来实现,使用<a>
标签可能更容易,这样你就不必费心任何额外的 javascrpt。
【讨论】:
@mani 不用担心。欢迎来到 SO。如果您对答案感到满意,请点赞并将其标记为已接受:)以上是关于如何在 django 管理页面中的每一行的列表页面上放置一个按钮的主要内容,如果未能解决你的问题,请参考以下文章
Django 管理员。当对象具有布尔字段== True时,如何为列表视图中的每一行添加背景颜色?