urls template example python django django-forms django-templates

python - template - httpresponse django example



¿Cómo procesar dos formularios en una vista? (3)

Personalmente, usaría una vista para manejar el POST de cada formulario.

Por otro lado, puede usar un elemento de entrada oculto que indique qué formulario se utilizó

<form action="/blog/" method="POST"> {{ blog_form.as_p }} <input type="hidden" name="form-type" value"blog-form" /> <!-- set type --> <input type="submit" value="Submit" /> </form> ... <form action="/blog/" method="POST"> {{ micro_form.as_p }} <input type="hidden" name="form-type" value"micro-form" /> <!-- set type --> <input type="submit" value="Submit" /> </form>

Con una vista como:

def blog(request): if request.method == ''POST'': if request.POST[''form-type''] == u"blog-form": # test the form type form = BlogForm(request.POST) ... else: form = MicroForm(request.POST) ... return render_to_response(''blog.html'', { ''blog_form'': BlogForm(), ''micro_form'': MicroForm(), })

... pero una vez más, creo que una vista por formulario (incluso si la vista solo acepta POST) es más simple que tratar de hacer lo anterior.

Tengo dos formas completamente diferentes en una plantilla. ¿Cómo procesarlos en una vista? ¿Cómo puedo distinguir cuál de los formularios se envió? ¿Cómo puedo usar el prefijo para lograr eso? ¿O tal vez es mejor escribir vistas separadas?

Saludos
chriss


Si las dos formas son completamente diferentes, no va a doler que sean manejadas por dos vistas diferentes. De lo contrario, puede usar el truco de ''elemento de entrada oculto'' que Zacherates ha tocado. O bien, siempre podría darle a cada elemento de submit un nombre único y diferenciar en la vista qué formulario se envió en función de eso.


como dijo Ayaz, deberías dar un nombre único para formar el botón de enviar

<form action="." method="post"> ...... <input type="submit" name="form1"> </form> <form action="." method="post"> ...... <input type="submit" name="form2"> </form> #view if "form1" in request.POST: ... if "form2" in request.POST: ...