Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

6.4 Cоздание, редактирование и удаление записей
5 из 5 шагов пройдено

Последним шагом добавим возможность устанавливать статус книги - прочитана она или нет.

Добавим функцию изменения статуса книги update_book_status() в файл books\views.py:

@require_http_methods(['PUT'])
def update_book_status(request, pk):
    book = get_object_or_404(Book, pk=pk)
    if book.read:
        book.read = False
    else:
        book.read = True
    book.save()
    return render(request, 'partial_book_detail.html', {'book': book})

Данная функция при вызове меняет статус книги на противоположный.

Добавим маршрут для данной функции, отредактируем файл books\urls.py:

from django.urls import path
from .views import (
    book_list,
    create_book,
    update_book_details,
    book_detail,
    delete_book,
    update_book_status,
)


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"),
    path("update_book_status/<int:pk>/", update_book_status, name="update_book_status"),
]


Подключим кнопки статуса книги Read и Unread в файле шаблона templates\partial_book_detail.html:

                            <!-- Ячейка состояния -->
                            <td>
                                {% if not book.read %}
                                <!-- Кнопка "Unread" -->
                                <button class="disbtn"
                                        hx-put="{% url 'update_book_status' book.id %}"
                                        hx-target="closest tr"
                                        hx-swap="outerHTML" >
                                    Unread
                                </button>
                                {% else %}
                                <!-- Кнопка "Read" -->
                                <button class="disbtn"
                                        hx-put="{% url 'update_book_status' book.id %}"
                                        hx-target="closest tr"
                                        hx-swap="outerHTML" >
                                    Read
                                 </button>
                                {% endif %}
                            </td>


HTMX атрибуты для кнопок Read и Unread:

  • hx-put="{% url 'update_book_status' book.id %}" определяет адрес запроса /update_book_status/<id книги>/ и тип запроса - PUT.

После нажатия данной кнопки будет изменён статус текущей книги на противоположный:


И соответственно строка книги в таблице будет заменена на ответ - строку с изменённым статусом-кнопкой:


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.