Django找到提交的表单

wer*_*uer 5 django formset

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

<form style="display: none;">
Run Code Online (Sandbox Code Playgroud)

所有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')
Run Code Online (Sandbox Code Playgroud)

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

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

Ben*_*Ben 8

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

<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>
Run Code Online (Sandbox Code Playgroud)

然后,提交按钮的名称将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
Run Code Online (Sandbox Code Playgroud)