es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Necesito desempaquetar 2 valores en el bucle for; se obtuvo 1 en Django 3.0.

Después de actualizar mi proyecto de Django 1.8 a Django 3.0, me enfrento a este problema “Se necesitan 2 valores para desempacar en el bucle for; se obtuvo 1”.

Consideremos mi archivo views.py como:

def add_items(request, pk, ot):
    client = request.user.client
    val1 = []
    warehouse = [
        (str(use.pk), use.name)
        for use in WareHouse.objects.filter(client_id=client).
        exclude(is_active=False)]

    project = Project.objects.filter(client=request.user.client).exclude(is_deleted=True)
    data1 = OtherOrder.objects.filter(id=pk)

    if data1.exists() and (len(warehouse) == 1):
        order = data1[0]
        if order.warehouse is None:
            try:
                order.warehouse_id = warehouse[0][0]
                order.save()
            except BaseException as e:
                logger.exception(e)

    data = OtherOrderItem.objects.filter(other_order_id=pk)
    total = data.aggregate(Sum('total_cost')).get('total_cost__sum') or 0.00
    charges = OtherOrderAdditionalCharges.objects.filter(order_id=pk)
    if charges.filter(charges_calculated=False):
        flag = True

    val = [i.id for i in data]
    for j in val:
        data3 = Movements.objects.values('other_order_item','damaged_quantity').filter(other_order_item=j, other_order_id=pk).annotate(Sum('quantity'))
        val1.append(data3)
    back = '/stock/other_orders/'
    return render(request,'stock/add_items.html',locals())

¿Cómo puedo resolver mi problema?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error “Necesita 2 valores para desempacar en el bucle for; se obtuvo 1” ocurre típicamente cuando se intenta desempacar una tupla con un número incorrecto de elementos. En tu código, el problema probablemente esté en el bucle for que intenta agregar valores a la lista “val1”.

    Para solucionar este error, puedes modificar el bucle for para desempacar correctamente la tupla agregando una segunda variable que reciba el segundo elemento de la tupla. Aquí tienes un ejemplo del bucle modificado:

    for j in val:
                data3 = Movements.objects.values('other_order_item', 'damaged_quantity').filter(other_order_item=j, other_order_id=pk).annotate(Sum('quantity'))
                for item_id, damaged_qty, total_qty in data3:
                    val1.append((item_id, damaged_qty, total_qty))
    

    Este bucle modificado asigna los tres elementos de las tuplas “data3” a las variables “item_id”, “damaged_qty” y “total_qty”, respectivamente, y luego añade una nueva tupla con los tres valores a la lista “val1”.

    Con este cambio, deberías poder ejecutar tu código sin encontrar el error “Necesita 2 valores para desempacar en el bucle for; se obtuvo 1”.

Comments are closed.