django - 添加到 django 中的收藏夹列表
问题描述
我在我的网站的产品页面上为每个产品添加了添加到收藏夹列表功能,用户可以将任何产品添加到他们的收藏夹列表中。但是,如果用户已经将此产品添加到收藏夹列表中,我希望显示删除单词而不是添加单词,这样如果他愿意,他可以从他的收藏列表中删除该产品。
但是会出现以下错误:
AttributeError: 'QuerySet' object has no attribute 'favourite'
# model
class Product(models.Model):
title = models.CharField(max_length=200)
favourite = models.ManyToManyField(User, related_name='user_favourite')
# view
def product(request):
products = Product.objects.all()
is_favourite = False
if products.favourite.filter(id=request.user.id).exists():
is_favourite = True
context = {'products': products, 'is_favourite': is_favourite}
#template
{% if is_favourite %}
<a href="{% url 'home:favourite' product.id %}"> remove </a>
{% else %}
<a href="{% url 'home:favourite' product.id %}"> add </a>
{% endif %}
解决方案
试试这个views.py:
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
def add_product(request,pk):
product = get_object_or_404(Product,pk=pk)
if request.user not in product.favourite.all():
product.favourite.add(request.user)
return HttpResponseRedirect(' --the url that you want to redirect the
user --')
def remove_product(request,pk):
product = get_object_or_404(Product,pk=pk)
if request.user in product.favourite.all():
product.favourite.remove(request.user)
return HttpResponseRedirect(' --the url that you want to redirect the
user --')
def product(request):
products = Product.objects.all()
context = {'products': products}
网址.py
urlpatterns = [
path('product/<int:pk>/add',views.add_product,name='add_product'),
path('product/<int:pk>/remove',views.remove_product,name='remove_product'),
]
#模板
{% for product in products %}
<!-- you should create a view for add and remove -->
{% if request.user in product.favourite.all %}
<a href="{% url 'home:remove_product' product.pk %}"> remove </a>
{% else %}
<a href="{% url 'home:add_product' product.pk %}"> add </a>
{% endif %}
{% empty %}
<h1>No products for now</h1>
{% endfor %}
推荐阅读
- python - Pandas:返回每组出现频率最高的值(可能没有应用)
- ssh - Windows 上的 ssh 连接被拒绝(wsl)
- python-3.x - 将列表转换为 PCollection
- c++ - 为什么我的 if 语句在它应该评估的时候没有评估 false?
- arrays - 如何使用 Powershell 为文件中的每一行创建一个新数组?
- azure - 尝试在 Azure 上部署无框架静态 Web 应用程序时,为什么我会从 GitHub Actions 收到构建错误?
- sql-server - 考虑到重叠,有没有更快的方法来增加时间范围?
- ios - 发布内容后的最佳转场
- c# - 为什么使用 string.Join 时空值会自动转换为空字符串?
- django - 如何查看一周内的注册总数?