feat: añadir edición y eliminación de valoraciones propias
This commit is contained in:
@@ -75,6 +75,14 @@
|
||||
</div>
|
||||
{% if can_review %}
|
||||
<a href="{% url 'add_review' product.id %}" class="btn btn-sm btn-outline-primary ms-auto">Valorar este producto</a>
|
||||
{% elif user_has_review %}
|
||||
<div class="ms-auto">
|
||||
<a href="{% url 'add_review' product.id %}" class="btn btn-sm btn-outline-primary">Editar mi valoración</a>
|
||||
<form method="post" action="{% url 'delete_review' product.id %}" style="display:inline;">
|
||||
{% csrf_token %}
|
||||
<button type="submit" class="btn btn-sm btn-outline-danger" onclick="return confirm('¿Eliminar esta valoración?');">Eliminar</button>
|
||||
</form>
|
||||
</div>
|
||||
{% elif user.is_authenticated %}
|
||||
<span class="text-muted ms-auto">Solo puedes valorar productos que hayas comprado</span>
|
||||
{% else %}
|
||||
@@ -115,6 +123,15 @@ async function loadReviews() {
|
||||
});
|
||||
imagesHtml += '</div>';
|
||||
}
|
||||
const actionsHtml = review.is_owner
|
||||
? `<div class="mt-2">
|
||||
<a href="/tienda/producto/${review.id}/valorar/" class="btn btn-sm btn-outline-primary me-1">Editar</a>
|
||||
<form method="post" action="/tienda/producto/${review.id}/valorar/eliminar/" style="display:inline;">
|
||||
{% csrf_token %}
|
||||
<button type="submit" class="btn btn-sm btn-outline-danger" onclick="return confirm('¿Eliminar esta valoración?');">Eliminar</button>
|
||||
</form>
|
||||
</div>`
|
||||
: '';
|
||||
reviewsHtml += `
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
@@ -128,6 +145,7 @@ async function loadReviews() {
|
||||
<h6 class="mt-2">${review.title}</h6>
|
||||
<p class="mb-1">${review.content}</p>
|
||||
${imagesHtml}
|
||||
${actionsHtml}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
@@ -70,5 +70,6 @@ urlpatterns = [
|
||||
path("reset-password", views.reset_password, name="reset_password"),
|
||||
path("reset-password-phase2/<str:code>", views.reset_password_phase2, name="reset_password_phase2"),
|
||||
path("producto/<int:product_id>/valorar/", views.add_review, name="add_review"),
|
||||
path("producto/<int:product_id>/valorar/eliminar/", views.delete_review, name="delete_review"),
|
||||
path("api/producto/<int:product_id>/valoraciones/", views.product_reviews, name="product_reviews"),
|
||||
]
|
||||
|
||||
+24
-3
@@ -401,10 +401,22 @@ def producto(request: HttpRequest, id: int):
|
||||
cache.set(cache_key, product, 300)
|
||||
|
||||
can_review = False
|
||||
if request.user.is_authenticated:
|
||||
can_review = product.has_user_purchased(request.user) and not Review.objects.filter(product=product, user=request.user).exists()
|
||||
user_has_review = False
|
||||
user_review_id = None
|
||||
|
||||
return render(request, "tienda/producto.html", {"product": product, "can_review": can_review})
|
||||
if request.user.is_authenticated:
|
||||
user_review = Review.objects.filter(product=product, user=request.user).first()
|
||||
if user_review:
|
||||
user_has_review = True
|
||||
user_review_id = user_review.id
|
||||
can_review = product.has_user_purchased(request.user) and not user_review
|
||||
|
||||
return render(request, "tienda/producto.html", {
|
||||
"product": product,
|
||||
"can_review": can_review,
|
||||
"user_has_review": user_has_review,
|
||||
"user_review_id": user_review_id
|
||||
})
|
||||
|
||||
def categoria(request: HttpRequest, id: int):
|
||||
page = 1
|
||||
@@ -2413,3 +2425,12 @@ def product_reviews(request: HttpRequest, product_id: int):
|
||||
"reviews_count": product.get_reviews_count(),
|
||||
"can_review": request.user.is_authenticated and product.has_user_purchased(request.user) and not Review.objects.filter(product=product, user=request.user).exists()
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def delete_review(request: HttpRequest, review_id: int):
|
||||
review = get_object_or_404(Review, id=review_id, user=request.user)
|
||||
product_id = review.product_id
|
||||
review.delete()
|
||||
messages.success(request, "Tu valoración ha sido eliminada.")
|
||||
return redirect(reverse("producto", args=[product_id]))
|
||||
|
||||
Reference in New Issue
Block a user