Cita:
Iniciado por razpeitia Cuando iteras el formset, lo que haces es que cada iteración es un form, recambio es un muy mal nombre para esa variable. Uso recambio.recambio.value para que solo me devuelva el valor (nada de editar este valor) y uso as_hidden por que al hacer el post request es necesario que vayan todos los valores. (Ver respuesta de arriba).
Pero es que lo que devuelve es la
id (1) del recambio, y no el
nombre (Recambio de prueba).
Cita:
Iniciado por razpeitia Exacto. De hecho en primera imagen que pusiste lo único editable que pusiste fue las unidades. Otra cosa es que te recomiendo es que no confíes en lo que regresa en campo precio (en el post request), recuerda siempre hacer el calculo según las unidades.
La primera imagen no usaba ningún formset, solo estaba maquetando cómo quedará al final.
¿Cómo? ¿Dices de poner este trozo de código dentro del 'if request.method == 'POST':'?
Código Python:
Ver originalprecio_total = 0
unidades_totales = 0
for recambio in carrito_de_compra:
precio_total = recambio.precio * recambio.unidades + precio_total
unidades_totales = recambio.unidades + unidades_totales
Cita:
Iniciado por razpeitia ¿Haz intentado con recamio.id.value?
Sí, y me da el mismo resultado, por eso te preguntaba.
Cita:
Iniciado por razpeitia Para eso puedes usar el método is_valid y capturar las excepciones de validación que puedan surgir por si falta algún otro campo.
Por ultimo para desplegar que hubo un o varios errores puedes añadir al response una variable que sea una lista de errores, si esta vacía no hay errores si hay entonces desplegar los errores.
Lo he conseguido hacer esta tarde pero de una manera mucho más sencilla (no sé si menos eficaz); añadí el errors en la plantilla.
EDITADO:
Me acabo de encontrar con un problema... Si yo con el inspector de Chrome cambio los valores de los input hidden (precio por ejemplo) y le doy al botón de Actualizar unidades, me cambia el precio. Cosa que evidentemente no quiero que se pueda. :/
¿No puedo poner solamente un input para unidades?