Как обрабатывать две формы в одном просмотре?

У меня в одном шаблоне две совершенно разные формы. Как их обрабатывать в одном окне? Как я могу определить, какая из форм была отправлена? Как я могу использовать префикс для этого? Или, может быть, лучше написать отдельные представления?

С уважением
chriss


person chriss    schedule 25.12.2008    source источник


Ответы (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) проще, чем пытаться сделать вышеупомянутое.

person Aaron Maenpaa    schedule 25.12.2008

как сказал аяз, вы должны дать уникальное имя кнопке отправки формы

<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:
    ...
person user20955    schedule 26.12.2008

Если эти две формы совершенно разные, конечно, не повредит, если они будут обрабатываться двумя разными представлениями. В противном случае вы можете использовать трюк со скрытым элементом ввода, о котором упоминал zacherates. Или вы всегда можете дать каждому submit элементу уникальное имя и различать в представлении, какая форма была отправлена ​​на его основе.

person ayaz    schedule 25.12.2008