Pregunta

Tengo dos formas completamente diferentes en una sola plantilla. Cómo procesarlas en una vista? ¿Cómo puedo distinguir cuál de las formas se presentó? ¿Cómo puedo usar el prefijo a acomplish eso? O tal vez es mejor escribir vistas separadas?
respecto
chriss

¿Fue útil?

Solución

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

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 la forma (incluso si la vista sólo acepta mensajes) es más simple que tratar de hacer lo anterior.

Otros consejos

Ayaz como dijo, se debe dar nombre único para formar 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:
    ...

Si las dos formas son completamente diferentes, que sin duda no se pierde nada con tener que ser manejados por dos puntos de vista diferentes. De lo contrario, es posible utilizar el 'oculto de entrada elemento de' truco zacherates ha tocado. O, siempre se puede dar a cada elemento de submit una único nombre, y se diferencian en la vista de qué forma se presentó basa en eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top