Добрый день!
Я успешно добавил кнопку Like/Dislike на свой сайт, воспользовавшись данным видео уроком. Однако, кнопка работает только для страницы Detailed Product, где отображен только один продукт.
Мне необходимо добавить данную кнопку на главную, где отображены несколько продуктов. Мой код:
models.py:
class Product(models.Model):
...
likes = models.ManyToManyField(User, blank=True, related_name='likes')
...
def total_likes(self):
return self.likes.count()
views.py:
def home(request):
products = Product.objects.all().order_by('-pub_date')
f = ProductFilter(request.GET, queryset=products)
return render(request, 'product/home.html', {'filter': f})
def detail(request, product_id):
product = get_object_or_404(Product, product_id=product_id)
is_liked = False
if product.likes.filter(id=request.user.id).exists():
is_liked = True
context = {
'product': product,
'is_liked': is_liked,
'total_likes': product.total_likes()
}
return render(request, 'product/detail.html', context)
def like_product(request):
product = get_object_or_404(Product, id=request.POST.get('id'))
if product.likes.filter(id=request.user.id).exists():
product.likes.remove(request.user)
is_liked = False
else:
product.likes.add(request.user)
is_liked = True
context = {
'product': product,
'is_liked': is_liked,
'total_likes': product.total_likes()
}
if request.is_ajax():
html = render_to_string('product/likes.html', context, request=request)
return JsonResponse({'form': html})
home.html:
<div class="container">
<div class="row">
{% for product in filter.qs %}
...
<div id="like-section-{{ product.id }}">
{% include 'product/likes.html' %}
</div>
...
{% endfor %}
</div>
</div>
likes.html:
{{ total_likes }} Like{{ total_likes|pluralize }}
<form action="{% url 'like_product' %}" method="post">
{% csrf_token %}
{% if is_liked %}
<button type="submit" name="product_id" value="{{ product.id }}" class="btn btn-like btn-danger">Dislike</button>
{% else %}
<button type="submit" name="product_id" value="{{ product.id }}" class="btn btn-like btn-primary">Like</button>
{% endif %}
</form>
Заранее благодарю за помощь!
Updated 10 June 2019, 12:27 by Alex_V.