Нельзя оставить два отзыва

This commit is contained in:
2025-01-16 18:37:27 +03:00
parent 782d9cfbb1
commit 2f02c8fa2b
2 changed files with 32 additions and 11 deletions

View File

@@ -37,6 +37,9 @@
</div>
{% if user.is_authenticated %}
{% if user_has_review %}
<p>Вы уже оставили отзыв.</p>
{% else %}
<div class="add-review">
<h3>Добавить отзыв</h3>
<form method="POST" action="{% url 'books:add_review' book.pk %}">
@@ -45,6 +48,7 @@
<button type="submit">Отправить</button>
</form>
</div>
{% endif %}
{% else %}
<p>Для добавления отзывов <a href="{% url 'login' %}">войдите</a> или <a href="{% url 'books:register' %}">зарегистрируйтесь</a>.</p>
{% endif %}

View File

@@ -32,14 +32,23 @@ def book_list(request):
def book_detail(request, pk):
"""Детальная страница книги."""
book = get_object_or_404(Book, pk=pk)
reviews = book.reviews.all()
review_form = ReviewForm()
user_has_review = False
if request.user.is_authenticated:
user_has_review = reviews.filter(user=request.user).exists()
return render(
request,
"books/book_detail.html",
{"book": book, "reviews": reviews, "review_form": review_form},
{
"book": book,
"reviews": reviews,
"review_form": review_form,
"user_has_review": user_has_review,
},
)
@@ -92,8 +101,16 @@ def delete_book(request, pk):
@login_required
def add_review(request, pk):
"""Добавление отзыва к книге (только авторизованный пользователь)."""
book = get_object_or_404(Book, pk=pk)
# Проверяем, не оставил ли уже этот пользователь отзыв
existing_review = Review.objects.filter(book=book, user=request.user).first()
if existing_review:
# Если уже есть отзыв, можно показать сообщение или
# перенаправить на страницу книги с сообщением
# Для простоты сделаем редирект с GET-параметром
return redirect("books:book_detail", pk=pk)
if request.method == "POST":
form = ReviewForm(request.POST)
if form.is_valid():