亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

產品變體未反映 Django 電子商務項目中訂單摘要中的更新數量

產品變體未反映 Django 電子商務項目中訂單摘要中的更新數量

慕勒3428872 2023-04-18 17:20:42
我對訂單摘要頁面中的變體和與之相關的數量有疑問。當我將 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> 
查看完整描述

3 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

當然,對于 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() 來增加正確的項目也是一種正確的方法。


查看完整回答
反對 回復 2023-04-18
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

order_item_qs = order_item_qs.filter(

            Q(item_variations__exact=v)

        )


with:

order_item_qs = order_item_qs.filter(item_variations__variation=v)


查看完整回答
反對 回復 2023-04-18
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

我認為問題在塊


if order_item_qs.exists():

        order_item = order_item_qs.first()

        order_item.quantity += 1

        order_item.save()

此代碼塊僅在您需要將其重寫為


if len(item_var) > 0:

   for items in item_var:

      order_item_qs = OrderItem.objects.filter(

        item=item,

        user=request.user,

        ordered=False

    ).filter(variation__exact=items,)


      if order_item_qs.exists():

          order_item = order_item_qs.first()

          order_item.quantity += 1

          order_item.save()

      else:

          order_item = OrderItem.objects.create(

             item=item,

            user=request.user,

            ordered=False

        )

          order_item.variation.add(*item_var)

          order_item.save()

    ```


查看完整回答
反對 回復 2023-04-18
  • 3 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號