Nota: he visto algunas publicaciones que son bastante similares a las mías, pero no creo que esas soluciones ayuden en mi caso de uso. Mi sitio web (creado con Django) tiene una página para cobrar los pagos de las cuotas.
Hay una página por familia, en la que habrá múltiples cuotas a pagar por cada miembro. Actualmente, tengo un botón de envío para cada vencimiento, como puede ver en el código a continuación.
{% for due in dues %} <tr> <td>{{due.0}}</td> <td>{{due.1}}</td> <td>{{ due.3}}</td> <td>{{ due.4 }}</td> <td>{{ due.5 }}</td> <td><form action="/dues/?family-dues={{ familyprofile }}" method="POST" id= "dues-payment"> {% csrf_token %} <input type="text" placeholder="Enter Amount" name="amount"> <input type="hidden" value="{{due.2}}" name="due-id"> <input type="hidden" value="{{due.0}}" name="member-id"> <input type="hidden" value="{{duefamily.0}}" name="family-id"> <button id="submit-payment">Pay</button></form></td> </tr> {% endfor %}El problema con esto es que solo se puede hacer un pago a la vez. ¿Hay alguna manera en la que pueda enviar todos los formularios de una sola vez? ¿Para que el cajero pueda simplemente ingresar los pagos apropiados en cada cuadro de texto y cuando se envíen todos los valores del cuadro de texto (cantidad pagada) junto con la identificación adeudada se devuelvan de una sola vez?
Escenario actual
Due ID 1 textbox(Value is 40) Pay Button Due ID 2 textbox(Value is 80) Pay Button Due ID 3 textbox(Value is 100) Pay ButtonSi una persona llega a pagar un total de $220 (como se muestra arriba) en tres categorías de vencimiento de pago, se debe presionar el botón de pago tres veces. ¿Hay alguna manera de que lo anterior se pueda cambiar al siguiente escenario?
Escenario deseado
Due ID 1 textbox(Value is 40) Due ID 2 textbox(Value is 80) Due ID 3 textbox(Value is 100) Pay ButtonEstoy abierto a todas las ideas que puedan ayudarme a resolver mi problema. Gracias por adelantado:)
El enfoque más simple sería hacer que toda la tabla fuera una sola forma.
<form action="/dues/?family-dues={{ familyprofile }}" method="POST" id= "dues-payment"> {% csrf_token %} <table> {% for due in dues %} <tr> <td>{{ due.0 }}</td> <td>{{ due.1 }}</td> <td>{{ due.3 }}</td> <td>{{ due.4 }}</td> <td>{{ due.5 }}</td> <td> <input type="text" placeholder="Enter Amount" name="due-{{ due.2 }}-amount"> </td> </tr> {% endfor %} </table> <input type="hidden" value="{{ ?? }}" name="member-id"> <input type="hidden" value="{{ duefamily.0 }}" name="family-id"> <button id="submit-payment">Pay</button> </form>Tenga en cuenta que agregué los ID debidos a los nombres de los campos que se muestran en cada línea. Ahora tendrá que hacer un poco de análisis de cadenas en el lado de Django para unirlas.
También es posible que desee consultar Django Formsets , que le permite definir todo el formulario en Python y simplemente llamar a form.as_table() en la plantilla. También tiene soporte para formularios anidados como este.
Creo que también debería poder hacer la cantidad de entradas como esta y luego obtener listas en Django, pero desafortunadamente no puedo probar si funciona. Obtendría uno llamado due-id y otro llamado due-amount , y luego confiaría en los valores para cada coincidencia de índice.
<td> <input type="text" placeholder="Enter Amount" name="due-amount[]"> <input type="hidden" value={{ due.2 }} name="due-id[]"> </td>