From c41188e17b68ec67f4f24d95f9a363511cd5d926 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Thu, 16 Jan 2025 18:40:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D0=B7?= =?UTF-8?q?=D1=8B=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../books/templates/books/book_detail.html | 10 +++++++++- .../books/templates/books/edit_review.html | 9 +++++++++ bookify/books/urls.py | 1 + bookify/books/views.py | 19 +++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 bookify/books/templates/books/edit_review.html diff --git a/bookify/books/templates/books/book_detail.html b/bookify/books/templates/books/book_detail.html index 225886e..636fecc 100644 --- a/bookify/books/templates/books/book_detail.html +++ b/bookify/books/templates/books/book_detail.html @@ -27,7 +27,14 @@

Отзывы

{% for review in reviews %}
-

{{ review.user.username }} ({{ review.rating }}/5)

+

+ {{ review.user.username }} + ({{ review.rating }}/5) + {% if review.user == user %} + + Редактировать отзыв + {% endif %} +

{{ review.text }}


@@ -36,6 +43,7 @@ {% endfor %} + {% if user.is_authenticated %} {% if user_has_review %}

Вы уже оставили отзыв.

diff --git a/bookify/books/templates/books/edit_review.html b/bookify/books/templates/books/edit_review.html new file mode 100644 index 0000000..be70b66 --- /dev/null +++ b/bookify/books/templates/books/edit_review.html @@ -0,0 +1,9 @@ +{% extends 'books/base.html' %} +{% block content %} +

Редактировать отзыв для "{{ review.book.title }}"

+
+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock %} diff --git a/bookify/books/urls.py b/bookify/books/urls.py index 651c54a..300e47b 100644 --- a/bookify/books/urls.py +++ b/bookify/books/urls.py @@ -24,4 +24,5 @@ urlpatterns = [ path("register/", views.register, name="register"), path("succesful-logout/", views.logout, name="logout"), path("book//edit/", views.edit_book, name="edit_book"), + path("review//edit/", views.edit_review, name="edit_review"), ] diff --git a/bookify/books/views.py b/bookify/books/views.py index a944e38..93f0ed0 100644 --- a/bookify/books/views.py +++ b/bookify/books/views.py @@ -121,6 +121,25 @@ def add_review(request, pk): return redirect("books:book_detail", pk=pk) +@login_required +def edit_review(request, pk): + """Редактирование отзыва, только если пользователь – автор.""" + review = get_object_or_404(Review, pk=pk) + # Проверяем владельца + if review.user != request.user: + raise PermissionDenied("Нельзя редактировать чужой отзыв.") + + if request.method == "POST": + form = ReviewForm(request.POST, instance=review) + if form.is_valid(): + form.save() + return redirect("books:book_detail", pk=review.book.pk) + else: + form = ReviewForm(instance=review) + + return render(request, "books/edit_review.html", {"form": form, "review": review}) + + def genre_recommendations(request, genre_name): """Рекомендации книг по заданному жанру.""" genre = get_object_or_404(Genre, name=genre_name)