Как добавить пользовательскую кнопку в зарегистрированную модель в админке сайта django
Может ли кто-нибудь направить меня в правильном направлении, как разместить кнопку рядом с кнопкой удаления ? Я хочу разместить рядом с ней кнопку подтверждения и отказа, чтобы при нажатии на нее пользователю отправлялось письмо о том, что его/ее заявка принята или отклонена. Я искал решение в Интернете, а также прочитал несколько похожих вопросов здесь, но я не уверен, что это правильное решение.
Сначала сделайте кнопки подтверждения и отказа на странице list_page, написав метод confirmed() и denied(), затем вы добавляете ваши пользовательские url в admin urls, переопределив метод get_urls() и сопоставив эти url с методом представления confirmed_application() и denied_application().
После обработки вашей логики вы можете перенаправить ту же страницу списка изменений.
@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
...