Как разместить кнопку на странице списка для каждой строки на странице django администратора - PullRequest
0 голосов
/ 27 мая 2020

Я хочу добавить кнопку для каждой строки, как показано на рисунке, на месте кнопки, которое будет отображать всплывающее окно с содержимым поля того же модального окна или того, что я вставляю для его отображения.

enter image description here

1 Ответ

1 голос
/ 28 мая 2020

Это на самом деле довольно легко сделать :) Хотя в зависимости от того, что вы хотите, чтобы кнопка делала, это может быть немного сложнее. Вы можете иметь все, что хотите, в своем представлении списка, просто создайте метод, который возвращает все, что вы хотите вставить, и перечислите его в 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 будут вставлены в заполнители.

Конечно, вы необходимо добавить javascript для doSomething, есть несколько способов сделать это, но вы можете узнать больше здесь . Если то, что вы хотите, может быть достигнуто с помощью привязки, может быть проще использовать тег <a>, и таким образом вам не придется беспокоиться о каких-либо дополнительных javascrpt.

...