我已经在我的网站的产品页面上为每个产品添加了添加到收藏夹列表功能,用户可以将任何产品添加到他们的收藏夹列表中。但是,如果用户已经将该产品添加到收藏夹列表中,我希望显示单词remove而不是单词add,这样,如果他愿意,他可以将该产品从他的收藏列表中删除。
但会出现以下错误:
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 %}
发布于 2021-02-18 09:30:44
试试这个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}
urls.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 %}
https://stackoverflow.com/questions/66257014
复制相似问题