产品变体未反映 Django 电子商务项目中订单摘要中的更新数量

我对订单摘要页面中的变体和与之相关的数量有疑问。

当我将 2 件商品添加到购物车时:

  • 小号商品 X 数量:1

  • 中号商品 X 数量:1

当我更改商品 X 尺寸中号的数量时,此更改反映在首先选择的商品 X 尺寸小号中。

要像这样:

  • 小号商品 X 数量:2

  • 中号商品 X 数量:1

在订单汇总中,模板中有加号和减号可以更改数量。

我最近明白了,因为模板中没有表格。将带有表单数据的 POST 请求发送到添加到购物车视图的代码不存在,因为 item_var 将始终是一个空列表,因此 order_item.variation.add(*item_var) 什么都不做。我不知道如何向该模板添加 POST 请求。

在模板中有一个添加到购物车的 URL”,但 URL 是通过 GET 传输的,因此 if request.method == 'POST': 之后的代码永远不会命中。此外,即使它会命中,add_to_cart url 也知道与变化无关,因为它只会获得物品弹头。

这是模板:

    <main>

        <div class="container">

        <div class="table-responsive text-nowrap" style="margin-top:90px">

        <h2> Order Summary</h2>

        <table class="table">

            <thead>

            <tr>

                <th scope="col">#</th>

                <th scope="col">Item Title</th>

                <th scope="col">Price</th>

                <th scope="col">Quantity</th>

                <th scope="col">Size</th> 

                <th scope="col">Total Item Price</th>

            </tr>

            </thead>

            <tbody>

            {% for order_item in object.items.all %}

            <tr>

                <th scope="row">{{ forloop.counter }}</th>

                <td>{{ order_item.item.title }}</td>

                <td>{{ order_item.item.price }}</td>

                <td>

                <a href="{% url 'core:remove-single-item-from-cart' order_item.item.slug %}"><i class="fas fa-minus mr-2"></a></i>

                {{ order_item.quantity }}

                <a href="{% url 'core:add-to-cart' order_item.item.slug %}"><i class="fas fa-plus ml-2"></a></i>

                </td>                

                <td>

                {% if order_item.variation.all %}

                {% for variation in order_item.variation.all %}

                {{ variation.title|capfirst }}

                {% endfor %}

                {% endif %}

                </td> 

慕勒3428872
浏览 143回答 3
3回答

叮当猫咪

当然,对于 django 来说,这两个项目是相同的。负责此的行是:if order_item_qs.exists():     order_item = order_item_qs.first()  # Here, you are always picking the first item that your filter returned, see: https://docs.djangoproject.com/en/dev/ref/models/querysets/#first     order_item.quantity += 1     order_item.save()第一的()¶返回查询集匹配的第一个对象,如果没有匹配的对象则返回 None 。如果 QuerySet 没有定义排序,则查询集自动按主键排序。这会影响聚合结果,如与默认排序或 order_by() 的交互中所述。然而,罪魁祸首是:order_item_qs = OrderItem.objects.filter(     item=item,     user=request.user,     ordered=False)你想将变化传递给它,例如order_item_qs = OrderItem.objects.filter(     item=item,     user=request.user,     ordered=False,     variation=variation )您可以考虑将尺码添加为产品字段,并根据变体创建单独的产品。但是,简单地检索变体并确保仅通过将其传递给 filter() 来增加正确的项目也是一种正确的方法。

德玛西亚99

order_item_qs = order_item_qs.filter(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Q(item_variations__exact=v)&nbsp; &nbsp; &nbsp; &nbsp; )with:order_item_qs = order_item_qs.filter(item_variations__variation=v)

智慧大石

我认为问题在块if order_item_qs.exists():&nbsp; &nbsp; &nbsp; &nbsp; order_item = order_item_qs.first()&nbsp; &nbsp; &nbsp; &nbsp; order_item.quantity += 1&nbsp; &nbsp; &nbsp; &nbsp; order_item.save()此代码块仅在您需要将其重写为if len(item_var) > 0:&nbsp; &nbsp;for items in item_var:&nbsp; &nbsp; &nbsp; order_item_qs = OrderItem.objects.filter(&nbsp; &nbsp; &nbsp; &nbsp; item=item,&nbsp; &nbsp; &nbsp; &nbsp; user=request.user,&nbsp; &nbsp; &nbsp; &nbsp; ordered=False&nbsp; &nbsp; ).filter(variation__exact=items,)&nbsp; &nbsp; &nbsp; if order_item_qs.exists():&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order_item = order_item_qs.first()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order_item.quantity += 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order_item.save()&nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order_item = OrderItem.objects.create(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;item=item,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user=request.user,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ordered=False&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order_item.variation.add(*item_var)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order_item.save()&nbsp; &nbsp; ```
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python