如何在一个视图中处理两个表单?

时间:2008-12-25 12:40:28

标签: python django django-forms django-templates

我在一个模板中有两种完全不同的形式。如何在一个视图中处理它们?如何区分提交的表格?我怎样才能使用前缀来实现呢?或者也许最好写出不同的观点?

至于
CHRISS

3 个答案:

答案 0 :(得分:5)

就个人而言,我会使用一个视图来处理每个表单的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)比尝试执行上述操作简单。

答案 1 :(得分:4)

像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:
    ...

答案 2 :(得分:0)

如果这两种形式完全不同,那么让它们由两种不同的视图处理肯定不会有害。否则,您可以使用 zacherates 触及的'隐藏输入元素'技巧。或者,您始终可以为每个submit元素指定一个唯一名称,并在视图中根据该名称区分提交的表单。