Как добавить пользовательскую кнопку, которая может использовать событие clicked в django admin.py

У меня есть модель, которая называется Record, модель имеет исходный код информации. Теперь я хочу добавить кнопку в админку сайта. Текущий код django admin.py выглядит так:

@admin.register(Record)
class ControlRecord(admin.ModelAdmin):
    list_display = ["file_path", "go_to_src_code", "func_info", "line"]
    search_fields = ['file_path', 'func_info']
    list_filter = ['severity', 'is_misinformation']
    actions = [jump_to_src_code]

    def go_to_src_code(self, obj):
        return format_html(
            '<button onclick= "" >Go</button>'
        )

    go_to_src_code.short_description = "GoToSrcCode"

Я хочу указать указанный метод после нажатия на кнопку, что мне делать?

это зависит от следующего действия.

Вы хотите вызвать js функцию на представлении списка:

def jump_to_src_code(*args, **kwargs):
    print('it works in python')

@admin.register(Record)
class ControlRecord(admin.ModelAdmin):
    list_display = ["file_path", "go_to_src_code", "func_info", "line"]
    search_fields = ['file_path', 'func_info']
    # list_filter = ['severity', 'is_misinformation']
    actions = [jump_to_src_code]

    class Media:
        js = ('myjs.js')

    def go_to_src_code(self, obj):
        return mark_safe('<button onclick= "alert(\'it works in js\'); // call function from myjs.js" >Go</button>')
    go_to_src_code.short_description = "GoToSrcCode"

щелчком мыши вы запускаете js: start js

Вы хотите вызвать специальное действие администратора:

def jump_to_src_code(*args, **kwargs):
    print('it works in python')

@admin.register(Record)
class ControlRecord(admin.ModelAdmin):
    list_display = ["file_path", "go_to_src_code", "func_info", "line"]
    search_fields = ['file_path', 'func_info']
    # list_filter = ['severity', 'is_misinformation']
    actions = [jump_to_src_code]

    # class Media:
        # js = ('myjs.js')

    def go_to_src_code(self, obj):
        action_name = 'jump_to_src_code'
        action_index_in_action_list = '1'
        return mark_safe(f"""
            <input type="hidden" name="_selected_action" value="{obj.id}">
            <input type="hidden" name="action" value="{action_name}">
            <button type="submit" name="index" value="{action_index_in_action_list}">Go</button>"""
            )
    go_to_src_code.short_description = "GoToSrcCode"

это дает вам возможность вызвать вашу функцию действия в python.

enter image description here

Вернуться на верх