如何使用 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()
我试图删除与 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()