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

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

【问题讨论】:

    标签: django-models django-templates django-admin django-admin-tools django-admin-actions


    【解决方案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。如果您对答案感到满意,请点赞并将其标记为已接受:)
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2016-04-03
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多