Django找到提交的表单

时间:2015-04-07 08:22:13

标签: django formset

我在一个模板中有3个表单集。在给定时间只能看到一个(其他两个完全隐藏):

<form style="display: none;">

所有3个表单都使用默认值呈现,即使没有输入数据也应该有效。

但是,我想知道在验证views.py时提交了哪一个。

在views.py中,我有以下内容:

def submitted(request):

    f1 = formset1(request.POST)
    f2 = formset2(request.POST)
    f3 = formset3(request.POST)

    if f1.is_valid() or f2.is_valid() or f3.is_valid():
        f1.save()
        f2.save()
        f3.save()
        # Do a lot of calculations...

        return render(request, 'submitted.html')

问题是,如果只提交f1,我不想保存f2或f3(每个formset都有自己的提交按钮)。 &#39;#做了很多计算......&#39;部分内容非常广泛,我不想不必要地复制代码。

如何使用相同的视图,但只保存并仅对提交的formset进行计算?

2 个答案:

答案 0 :(得分:7)

如果每个表单都有自己的提交按钮:

<form id='form1'>
    ...
    <input type='submit' name='submit-form1' value='Form 1' />
</form>
<form id='form2'>
    ...
    <input type='submit' name='submit-form2' value='Form 2' />
</form>
<form id='form3'>
    ...
    <input type='submit' name='submit-form3' value='Form 3' />
</form>

然后,无论提交哪种表单,提交按钮的名称都会显示在request.POST中:

'submit-form1' in request.POST # True if Form 1 was submitted
'submit-form2' in request.POST # True if Form 2 was submitted
'submit-form3' in request.POST # True if Form 3 was submitted

答案 1 :(得分:0)

我遇到过类似的问题,我在模板中有多个表单,我需要知道提交了哪个表单。为此,我使用了提交按钮。

让我们说你有这样的表格:

<form yourcode>
    # ... ...
    # your input fields
    # ... ... 
    <input method="post" type="submit" name="action" class="yourclass" value="Button1" />
</form>

<form yourcode>
    # ... ...
    # your input fields
    # ... ... 
    <input method="post" type="submit" name="action" class="yourclass" value="Button2" />
</form>

您可以阅读这些提交按钮之间的差异,第一个的值是 Button1 ,第二个是 Button2

在您的视图中,您可以拥有如下控件:

def yourview():
    # ... ... 
    # Your code
    # ... ... 
    if request.method == 'POST':
        if request.POST['action'] == "Button1":
            # This is the first form being submited
            # Do whatever you need with first form

        if request.POST['action'] == "Button2":
            # This is the second form being submited
            # Do whatever you need with second form

因此,您可以使用按钮的值控制提交的表单。还有其他方法可以做到这一点,但这种方式对我的问题更容易。

您还可以使用名称属性过滤表单