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

Jus*_*rez 1 django django-admin

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

小智 5

首先通过编写confirmed()denied()方法在list_page中制作confirm和deny按钮,然后通过重写get_urls()方法将自定义url附加到管理url中,并将这些url映射到视图方法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 do the logic
        ...
Run Code Online (Sandbox Code Playgroud)