Как обработать две формы в одном представлении? - PullRequest
5 голосов
/ 25 декабря 2008

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

С уважением
Chriss

Ответы [ 3 ]

5 голосов
/ 25 декабря 2008

Лично я бы использовал одно представление для обработки 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) проще, чем пытаться сделать это.

4 голосов
/ 26 декабря 2008

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

<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:
    ...
0 голосов
/ 25 декабря 2008

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

...