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

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

View File

@@ -32,14 +32,23 @@ def book_list(request):
def book_detail(request, pk): def book_detail(request, pk):
"""Детальная страница книги."""
book = get_object_or_404(Book, pk=pk) book = get_object_or_404(Book, pk=pk)
reviews = book.reviews.all() reviews = book.reviews.all()
review_form = ReviewForm() review_form = ReviewForm()
user_has_review = False
if request.user.is_authenticated:
user_has_review = reviews.filter(user=request.user).exists()
return render( return render(
request, request,
"books/book_detail.html", "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 @login_required
def add_review(request, pk): def add_review(request, pk):
"""Добавление отзыва к книге (только авторизованный пользователь)."""
book = get_object_or_404(Book, pk=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": if request.method == "POST":
form = ReviewForm(request.POST) form = ReviewForm(request.POST)
if form.is_valid(): if form.is_valid():