我尝试删除与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()
答案 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()