python - 如何使用 Django 在主页上为多个对象添加“喜欢”?
问题描述
我有一个适用于产品详细信息页面的 Ajax 喜欢/不喜欢按钮。但是,我想将它添加到列出多个产品的主页上。这是我目前在models.py中的内容:
class Product(models.Model):
...
likes = models.ManyToManyField(User, blank=True, related_name='likes')
...
def total_likes(self):
return self.likes.count()
def is_liked(self, request):
return self.likes.filter(id=request.user.id).exists()
视图.py:
def home(request):
products = Product.objects.all().order_by('-pub_date')
return render(request, 'product/home.html', {'product': products})
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})
主页.html:
<div class="album py-5 bg-dark">
<div class="container">
<div class="row">
{% for product in product.all %}
{% if product.featured %}
...
<div id="like-section-{{ product.id }}">{{ product.total_likes }} Like{{ product.total_likes|pluralize }}
<form action="{% url 'like_product' %}" method="post">{% csrf_token %}
{% if product.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>
</div>
...
{% endif %}
{% endfor %}
</div>
</div>
</div>
目前,喜欢/不喜欢按钮的状态没有被保存(当我按下“喜欢”时,按钮变为“不喜欢”,并且正在记录类似的内容。但是在我重新加载页面后,按钮变为“喜欢”)。似乎类is_liked
内的函数存在问题Product
。不知道如何解决。非常感谢您的帮助!
解决方案
推荐阅读
- spring-mvc - Spring-MVC Oracle 数据源连接问题
- node.js - 面向对象编程的表达
- maven-plugin - 在 Eclipse IDE 中运行我的 TestNG 时出现错误,任何人都可以看看
- javascript - 在网站上实现 JS 计数效果
- python - Python 尝试并排除混乱
- windows - 将密钥注入 Windows 上不同应用程序的通用解决方案?
- sql - 在查询中减去 2 个给定类型的两列,否则保持原样
- reactjs - 如何使用 React 钩子在动态事件处理程序中增加值?
- https - Gravatar 默认位置因丢失电子邮件而错误重定向到 https://i*.wp.com/
- atom-editor - 无法加载 Atom-live-server