Нельзя оставить два отзыва
This commit is contained in:
@@ -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 %}
|
||||||
|
|||||||
@@ -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():
|
||||||
|
|||||||
Reference in New Issue
Block a user