Редактирование отзывов

This commit is contained in:
2025-01-16 18:40:32 +03:00
parent 2f02c8fa2b
commit c41188e17b
4 changed files with 38 additions and 1 deletions

View File

@@ -27,7 +27,14 @@
<h3>Отзывы</h3>
{% for review in reviews %}
<div class="review">
<p><strong>{{ review.user.username }}</strong> ({{ review.rating }}/5)</p>
<p>
<strong>{{ review.user.username }}</strong>
({{ review.rating }}/5)
{% if review.user == user %}
<!-- Добавим ссылку на редактирование -->
<a href="{% url 'books:edit_review' review.pk %}">Редактировать отзыв</a>
{% endif %}
</p>
<p>{{ review.text }}</p>
<hr>
</div>
@@ -36,6 +43,7 @@
{% endfor %}
</div>
{% if user.is_authenticated %}
{% if user_has_review %}
<p>Вы уже оставили отзыв.</p>

View File

@@ -0,0 +1,9 @@
{% extends 'books/base.html' %}
{% block content %}
<h2>Редактировать отзыв для "{{ review.book.title }}"</h2>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Сохранить</button>
</form>
{% endblock %}

View File

@@ -24,4 +24,5 @@ urlpatterns = [
path("register/", views.register, name="register"),
path("succesful-logout/", views.logout, name="logout"),
path("book/<int:pk>/edit/", views.edit_book, name="edit_book"),
path("review/<int:pk>/edit/", views.edit_review, name="edit_review"),
]

View File

@@ -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)