为了账号安全,请及时绑定邮箱和手机立即绑定

为什么它没有正确显示?

为什么它没有正确显示?

POPMUISE 2023-10-16 10:25:31
我目前正在开发一个在线商店,人们可以将产品添加到购物车。在我的 home html 文件中,如果产品未添加到购物车,我想显示“添加到购物车”按钮;如果添加产品,则显示“从购物车删除”按钮。但它无法正常工作。我现在收到“从购物车中删除”按钮。我的index.html:{% extends 'base.html' %} {% block content %}    <h1>Products</h1>    <div class="container-md">        <div class="row">            {% for product in products %}                <div class="col">                    <div class="card-deck" style="width: 18rem;">                      <img src="{{ product.image_url }}" class="card-img-top" alt="...">                      <div class="card-body">                        <a class="card-title" href="{% url 'detail-view' product.slug %}">{{ product.name }}</a>                        <p class="card-text">${{ product.price }}</p>                        {% if product in Cart.products.all %}                            <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>                        {% else %}                            <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a>                         {% endif %}                      </div>                    </div>                </div>            {% endfor %}        </div>    </div>{% endblock %}我的购物车的views.py:from django.shortcuts import render, redirect, HttpResponseRedirectfrom products.models import Productfrom .models import Cartfrom django.contrib import messagesfrom django.urls import reversedef cart(request):    cart = Cart.objects.all()[0]    context = {"cart":cart}    template = 'shopping_cart/cart.html'    return render(request, template, context)
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

代替 :


{% if product in Cart.products.all %}

      <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>

{% else %}

     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> 

{% endif %}

你可以这样尝试:


{% if not product.cart_set.exists %}

     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>

{% else %}

     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> 

{% endif %}

我用来reverse relation检查该产品是否存在任何购物车。但它会检查该产品是否在任何购物车中。这不应该是正确的,因为它应该检查产品是否在特定的购物车中。

现在,如果您想更具体地了解该产品是否存在于某个购物车中,我建议在视图中进行此计算。例如,在您的产品视图中,您可以这样做:


from django.db.models import Case, When, Value, BooleanField


cart = Cart.objects.first()


products = Product.objects.annotate(in_cart=Case(When(cart__pk=cart.id,then=Value(True)),default=Value(False),output_field=BooleanField()))


return render(request, template.html, context={'products':products})

并签入模板:


{% if not product.in_cart %}

          <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>

{% else %}

         <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> 

{% endif %}

我在这里使用 djangoconditional expression检查产品是否在某个购物车中。

也许您的代码中出现了更简单的错误:

在你的逻辑中添加一个notif else

{% if not product in Cart.products.all %}

      <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>

{% else %}

     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> 

{% endif %}


查看完整回答
反对 回复 2023-10-16
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信