У меня в одном шаблоне две совершенно разные формы. Как их обрабатывать в одном окне? Как я могу определить, какая из форм была отправлена? Как я могу использовать префикс для этого? Или, может быть, лучше написать отдельные представления?
С уважением
chriss
Как обрабатывать две формы в одном просмотре?
Ответы (3)
Лично я бы использовал одно представление для обработки POST каждой формы.
С другой стороны, вы можете использовать скрытый элемент ввода, который указывает, какая форма была использована.
<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>
С такой точки зрения, как:
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(),
})
... но еще раз, я думаю, что одно представление для каждой формы (даже если представление принимает только POST) проще, чем пытаться сделать вышеупомянутое.
как сказал аяз, вы должны дать уникальное имя кнопке отправки формы
<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:
...
Если эти две формы совершенно разные, конечно, не повредит, если они будут обрабатываться двумя разными представлениями. В противном случае вы можете использовать трюк со скрытым элементом ввода, о котором упоминал zacherates. Или вы всегда можете дать каждому submit
элементу уникальное имя и различать в представлении, какая форма была отправлена на его основе.