MultiValueDictKeyError: "'products'"

0

I do not know why I do not recognize my products as I solve my error, my version is 2.7 of python thanks in advance

views.py

def comprar(request):
    productos = literal_eval(request.POST["productos"])
    pago      = literal_eval(request.POST["pago"])

    try:
        usr = get_object_or_404(Usuario, cedula = request.POST["cliente"])
    except MultiValueDictKeyError:
        n_c = literal_eval(request.POST["nuevo_cliente"])
        usr = Usuario(  nombre = n_c["nombre"],
                        cedula = n_c["cedula"],
                        carnet = n_c["carnet"],
                        saldo  = 0,
                        fecha  = datetime.now(),
                        tipo   = 'C')
    usr.save()
    f = Factura( usuario = usr, fecha = datetime.now())
    f.save()

    for d in productos:
        prod = get_object_or_404(Producto, nombre = d["nombre"])

        pv = VentaProducto(producto = prod, factura = f, cantidad = d["cantidad"], precio = prod.precio_obj())
        pv.save()

        prod.ventas   += 1
        prod.cantidad -= pv.cantidad
        prod.save()

    e = Decimal(pago['efectivo'])
    d = Decimal(pago['donacion'])
    r = Decimal(pago['recarga'])
    s = Decimal(pago['saldo'])

    if(e > 0):
        m1 = MovimientoVentas(factura = f, tipo = 'E', cantidad =  e)
        m1.save()
    if(d > 0):
        m1 = MovimientoVentas(factura = f, tipo = 'D', cantidad =  d)
        m1.save
    if(r > 0):
        m1 = MovimientoVentas(factura = f, tipo = 'R', cantidad = r)
        m1.save()
        usr.saldo += r
    if(s > 0):
        m1 = MovimientoVentas(factura = f, tipo = 'S', cantidad = s)
        m1.save()
        usr.saldo -= s

    usr.save()

    return redirect(reverse('ventas_app.views.compra_ok'))

funcion.js

function comprar() {
    var nombres = [],
        c_p = Global.compra.productos,
        hay_compras = false;

    for(var prop in c_p) {
        if(c_p.hasOwnProperty(prop)) {
            hay_compras = true;
            nombres.push(c_p[prop].cantidad+" "+prop+"s");
        }
    }

    if(!hay_compras) {
        alert("No hay productos en la lista de compra.");
        return;
    }


    //Se crea el formulario de la compra:
    var form = new Element("FORM", {'method':"POST", 'action':'/sistemacaja/comprar_do'});
    form.innerHTML = Global.context;

    //Se agrega la lista de productos de la compra al form por medio de un hiden.
    var desc_productos = [];
    for(var prop in c_p) {
        if(c_p.hasOwnProperty(prop)) {
            desc_productos.push('{"nombre":"'+prop+'","cantidad":'+c_p[prop].cantidad+'}');
        }
    }
    form.insert(new Element("INPUT",{'type' : 'hiden', 'name' : "productos", 'value' : "["+desc_productos.join(',')+"]"}));


    //Se crea el hiden para enviar la informacion del cliente:
    var hidden = new Element("INPUT",{'type' : 'hiden'});

    var nuevo_cliente = revisar_nuevo_cliente();
    var nombre;
    if(Global.cliente_actual == "0" && nuevo_cliente != null ) {
        hidden.name  = "nuevo_cliente";
        hidden.value = "{ 'nombre' : '"+nuevo_cliente.get_nombre()+"', 'cedula' : '"+nuevo_cliente.get_cedula()+"', 'carnet' : '"+nuevo_cliente.get_carnet()+"' }";
        nombre = nuevo_cliente.get_nombre();
    } else {
        hidden.name  = "cliente";
        hidden.value = Global.cliente_actual;
        nombre = Global.lista_clientes[Global.cliente_actual].get_nombre();
    }
    form.insert(hidden);

    //Se crea un hiden para la informacion del pago:
    var e = +$("efectivo_txt").value,
        s = +$("saldo_lbl").innerHTML,
        r = +$("recarga_lbl").innerHTML,
        d = +$("donacion_lbl").innerHTML;


    //Verificaciones de los campos:
    if(isNaN(e)){
        alert("El campo de pago en efectivo no es reconocible.");
        return;
    }
    if(r < 0){
        alert("Este cliente no puede pagar con esta cantidad de saldo.");
        return;
    }

    if(hidden.value == 0 && r > 0 ){
        alert("El cliente por defecto no puede recargar saldo.")
        return;
    }

    form.insert(new Element("INPUT",{'type' : 'hiden', 'name' : "pago", 
            'value' : "{'efectivo': '"+e+"' , 'saldo': '"+s+"' , 'recarga': '"+r+"' , 'donacion': '"+d+"' }"
        }));

    //Se envia un mensaje de confirmacion de la compra:
    var conf = confirm("Esta seguro que desea hacer la venta de " +
                nombres.join(" ,") + "\n al usuario '"+nombre+"' a un costo de: " +
                Global.dinero.evaluate( {monto : Global.compra.total} ));

    if(conf) form.submit();
}

urls.py

from django.conf.urls import *
from django.conf import settings
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^sistemacaja/comprar_do$'            , 'ventas_app.views.comprar'),
)

error

Internal Server Error: /sistemacaja/comprar_do
Traceback (most recent call last):
  File "C:\ad\lib\site-packages\django\core\handlers\base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\ad\sistema_ventas_ceic_master\ventas_app\views.py", line 503, in comprar
    productos = literal_eval(request.POST["productos"])
  File "C:\ad\lib\site-packages\django\utils\datastructures.py", line 301, in __getitem__
    raise MultiValueDictKeyError(repr(key))
MultiValueDictKeyError: "'productos'"
[19/Nov/2018 21:45:05] "GET /sistemacaja/comprar_do HTTP/1.1" 500 78477
    
asked by Maria 20.11.2018 в 02:58
source

0 answers