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