Теперь добавим возможность удалять книги.
Добавим функцию удаления книги delete_book() в файл books\views.py:
@require_http_methods(['DELETE'])
def delete_book(request, pk):
book = get_object_or_404(Book, pk=pk)
book.delete()
return HttpResponse()
Добавим маршрут для данной функции, отредактируем файл books\urls.py:
from django.urls import path
from .views import (
book_list,
create_book,
update_book_details,
book_detail,
delete_book,
)
urlpatterns = [
path("", book_list, name="book_list"),
path("create_book/", create_book, name="create_book"),
path("update_book_details/<int:pk>/", update_book_details, name="update_book_details"),
path("book_detail/<int:pk>/", book_detail, name="book_detail"),
path("delete_book/<int:pk>/", delete_book, name="delete_book"),
]
Подключим кнопку Delete в файле шаблона templates\partial_book_detail.html:
<!-- Кнопка "Delete" -->
<button class="disbtn"
hx-delete="{% url 'delete_book' book.id %}"
hx-target="closest tr"
hx-swap="outerHTML"
hx-confirm="Are you sure you wish to delete this book?" >
Delete
</button>
HTMX атрибуты для кнопки Delete:
hx-delete="{% url 'delete_book' book.id %}"определяет адрес запроса/delete_book/<id книги>/и тип запроса - DELETE.
hx-confirm="Are you sure you wish to delete this book?"выводит соответствующее подтверждение перед запросом.
После нажатия данной кнопки будет удалена текущая книга, и её строка в таблице будет заменена на ответ - пустую строку.
Давайте проверим работу удаления записей, перейдем на наш сайт:
Выберем любую книгу, я выбрал с ID=1, и нажмем удалить:
После того, как мы подтвердили удаление, мы видим что наша запись была полностью удалена, обновления страницы так-же не потребовалось.