首页 > 解决方案 > 如何使用 python 从 woocommerce 订单中删除 line_items

问题描述

我试图删除与 woocommerce 订单相关的所有产品以使用新产品更新此订单,但未成功。

为此,我想第一步是删除特定订单的所有line_items并进行更新。

第二步是再次做一个看跌,但这次新产品在 line_items 的位置。

有谁知道我的代码出了什么问题?

在这篇文章https://github.com/woocommerce/woocommerce/issues/22177中,我看到我必须在我的line_items中的每个产品的数量字段中输入0,但它不起作用。

这是我的代码:

def update_woocommerce_order_products_with_quantities(wcapi,order,oldWooOrderHasProducts):


    fetched_products=Woo_Order_Has_Products.objects.filter(woo_order_id=order_id)

    #FIRST I HAVE TO DELETE THE PRODUCTS OF THE WOOCOMMERCE ORDER
    for oldWooOrderHasProduct in oldWooOrderHasProducts:
        data = {
            "line_items": [
        {
            "id": str(oldWooOrderHasProduct.wholesale_product.pid),
            "quantity": 0,
        }
        ]
            }

    wcapi.put("orders/"+str(oid),data).json()


    #for every product update the price and quantity
    for fetched_product in fetched_products:

        data = {
            "line_items": [
        {
            "id": str(fetched_product.wholesale_product.pid),
            "quantity": str(fetched_product.quantity),
            "price": str(fetched_product.price)
        }]
            }

    wcapi.put("orders/"+str(oid),data).json()

标签: pythondjangowoocommercewoocommerce-rest-api

解决方案


这里:

for oldWooOrderHasProduct in oldWooOrderHasProducts:
    data = {
        "line_items": [
    {
        "id": str(oldWooOrderHasProduct.wholesale_product.pid),
        "quantity": 0,
    }
    ]
        }

wcapi.put("orders/"+str(oid),data).json()

data在每次迭代时都重新绑定,因此只有最后一个值用于 API 调用。您想data在循环外创建字典,并且只附加到line_items循环内:

data = {"line_items": []}

for oldWooOrderHasProduct in oldWooOrderHasProducts:
    data["line_items"].append({
        "id": str(oldWooOrderHasProduct.wholesale_product.pid),
        "quantity": 0,
        })

第二个循环也有同样的问题。


推荐阅读