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

时间:2019-09-24 12:13:56

标签: python django woocommerce woocommerce-rest-api

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

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

第二步是再次推杆,但这次将新产品放在line_items的位置。

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

在这篇https://github.com/woocommerce/woocommerce/issues/22177帖子中,我看到必须将 line_items 中每个产品的数量字段放入0,但不起作用。< / p>

这是我的代码:

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()

2 个答案:

答案 0 :(得分:1)

这里:

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,
        })

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

答案 1 :(得分: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()