如何使用 python 从 woocommerce 订单中删除 line_items

How to delete line_items from a woocommerce order using python

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

要做到这一点,我想第一步是删除特定订单的所有 line_items 并进行更新。

第二步再次做空,不过这次是新品在line_items的位置。

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

在这个post、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()

此处:

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 dict,并且只在循环内附加到 line_items

data = {"line_items": []}

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

你在第二个循环中遇到了同样的问题。

要删除订单中 line_items 中的现有产品,您必须:

1) 从 woocommerce rest api 获取 line_items。 oid是订单的id。

r=wcapi.get("orders/"+str(oid)).json()
line_items=r['line_items']

2) 根据line_items键创建数据字典。重要的是将 line_items 中每个产品的数量都设为零。

data = {"line_items": []}
for line_item in line_items:
data["line_items"].append({
"id": line_item["id"],
"quantity": 0
})

3) 通过woocommerce rest更新数据api.

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