如何在 Django 管理站点的注册模型中添加自定义按钮

How to add a custom button in a registered model in django admin site

任何人都可以指导我如何在删除按钮旁边放置一个按钮 的正确方向吗?我想在它旁边放一个确认和拒绝按钮,当我点击它时,它会向用户发送一封电子邮件,告知 his/her 申请被接受或拒绝。我在网上搜索了一个解决方案,也在这里阅读了一些类似的问题,但我不确定这些是否正确。

首先在list_page中通过编写confirmed()denied()方法制作确认和拒绝按钮,然后您通过覆盖 get_urls() 方法并将这些 url 映射到视图方法,将自定义 urls 添加到管理 urls confirmed_application()denied_application().

处理您的逻辑后,您可以重定向相同的 change_list 页面。

@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
    list_display = ['your_model_fields', 'confirmed', 'denied']


    def confirmed(self, obj)
        url = reverse('admin:confirm_url', kwargs={'id': obj.id})
        return format_html('<a class="button" href="{}">Confirm</a>', url)

    def denied(self, obj)
        url = reverse('admin:denied_url', kwargs={'id': obj.id})
        return format_html('<a class="button" href="{}">Deny</a>', url)


    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('confirm/<int:id>', self.confirmed_application, name='confirm_url'),
            path('deny/<int:id>', self.denied_application, name='denied_url'),
        ]
        return custom_urls + urls


    def confirmed_application(self, request, id):
        # you get object_id you can do whatever you want
        # you can send a mail

        # after processed all logic you can redirect same modeladmin changelist page
        redirect_url = "admin:{}_{}_changelist".format(self.opts.app_label, self.opts.model_name)
        return redirect(reverse(redirect_url))


    def denied_application(self, request, id):
        # same as  confirmed_application
        ...