Вопрос

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

с уважением
Крисс

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top