Как удалить line_items из заказа woocommerce с помощью python - PullRequest
0 голосов
/ 24 сентября 2019

Я безуспешно пытаюсь удалить все продукты, связанные с заказом 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()

1 Ответ

1 голос
/ 24 сентября 2019

Здесь:

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

И у вас та же проблема для второго цикла.

...