首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加到django中的收藏列表

添加到django中的收藏列表
EN

Stack Overflow用户
提问于 2021-02-18 17:24:18
回答 1查看 66关注 0票数 0

我已经在我的网站的产品页面上为每个产品添加了添加到收藏夹列表功能,用户可以将任何产品添加到他们的收藏夹列表中。但是,如果用户已经将该产品添加到收藏夹列表中,我希望显示单词remove而不是单词add,这样,如果他愿意,他可以将该产品从他的收藏列表中删除。

但会出现以下错误:

代码语言:javascript
运行
复制
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 %}
EN

回答 1

Stack Overflow用户

发布于 2021-02-18 17:30:44

试试这个views.py:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
   urlpatterns = [
     path('product/<int:pk>/add',views.add_product,name='add_product'),
     path('product/<int:pk>/remove',views.remove_product,name='remove_product'),
     ]

#模板

代码语言:javascript
运行
复制
 {% 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 %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66257014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档