如何在 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
...
任何人都可以指导我如何在删除按钮旁边放置一个按钮
首先在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
...