2008-12-25 22 views
5

Tengo dos formularios 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?

respecto
chriss¿Cómo procesar dos formularios en una vista?

Respuesta

5

En lo personal, me gustaría usar una vista para manejar la POST de cada forma.

Por otra parte, se puede utilizar un elemento de entrada oculto que indique qué forma 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 una vista por formulario (incluso si la vista solo acepta POST) es más simple que tratar de hacer lo anterior.

0

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

4

como Ayaz dijo, usted debe dar nombre único para formar botón de envío

<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: 
    ... 
Cuestiones relacionadas