首页 > 解决方案 > 添加到 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 %}

标签: djangodjango-modelsdjango-views

解决方案


试试这个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 %}

推荐阅读