Pergunta

Eu tenho duas formas completamente diferentes em um modelo. Como processá-los em uma visão? Como posso distinguir qual das formas foi submetido? Como posso usar o prefixo para acomplish isso? Ou talvez seja melhor escrever vistas separadas?
relação
chriss

Foi útil?

Solução

Pessoalmente, eu usaria um ponto de vista para lidar com o post de cada formulário.

Por outro lado, você poderia usar um elemento de entrada oculto que indicar qual formulário foi usado

<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>

Com 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(),
    })

... mas mais uma vez, acho que um ponto de vista por forma (mesmo que a vista só aceita posts) é mais simples do que tentar fazer o descrito acima.

Outras dicas

como ayaz disse, você deve dar nome exclusivo para formar botão 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:
    ...

Se as duas formas são completamente diferentes, certamente não ferir a ter-lhes ser tratado por dois pontos de vista diferentes. Caso contrário, você pode usar o truque 'escondido input elemento' zacherates tem abordado. Ou, você pode sempre dar a cada elemento submit um única nome, e diferenciar na visão que forma foi apresentado com base nisso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top