Python django使用一个提交按钮提交两个不同的表单

Python django使用一个提交按钮提交两个不同的表单,python,django,forms,Python,Django,Forms,是否可以使用django中的一个提交按钮提交两个不同的表单? 我有一个叫做“仪器”的表格和4个相等的表格“配置”。现在我想提交一个配置和工具。e、 g.仪表+配置1和仪表+配置2。每个配置都有自己的提交按钮 我用配置表单中的一个按钮进行了尝试: <input onclick="submitForms()" class="btn btn-primary cfg" type="submit" value="Start" > 这是我在views.py中的方法: if request.me

是否可以使用django中的一个提交按钮提交两个不同的表单? 我有一个叫做“仪器”的表格和4个相等的表格“配置”。现在我想提交一个配置和工具。e、 g.仪表+配置1和仪表+配置2。每个配置都有自己的提交按钮

我用配置表单中的一个按钮进行了尝试:

<input onclick="submitForms()" class="btn btn-primary cfg" type="submit" value="Start" >
这是我在views.py中的方法:

if request.method == 'POST':
        form1 = dataproviderInstrumentForm(request.POST)
        form2 = dynamicTimeseriesForm(request.POST)
        print(request.POST)
        if form1.is_valid() or form2.is_valid(): 
            # do some stuff

else:
    form1 = dataproviderInstrumentForm() # an unbound form
    form2 = dynamicTimeseriesForm() # an unbound form

不要在html中有多个
标记,只使用一个
标记,并在其下添加所有表单的字段

模板中的示例

<form >
    {{ form1.as_p }}
    {{ form2.as_p }}
    {{ form3.as_p }}
</form>
在这种情况下使用它更好

所以你可以

if request.method == 'POST':
        form1 = Form1( request.POST,prefix="form1")
        form2 = Form2( request.POST,prefix="form2")
        print(request.POST)
        if form1.is_valid() or form2.is_valid(): 
else:
        form1 = Form1(prefix="form1")
        form2 = Form2(prefix="form2")

扩展@Rohan答案,并在表单上添加更多控件

不依赖表单/无关系/保存多个表单中的任何表单

单独检查每个表单以检查哪些表单无效。如果包含错误,则将它们存储到上下文中,或者重定向它们

if request.method == 'POST':
    form1 = Form1( request.POST,prefix="form1")
    form2 = Form2( request.POST,prefix="form2")
    
    if form1.is_valid():
       # save them    
       
       # context['form1_message'] = 'Form1 saved'
    else: 
       #save them into context
       context['form1']= form1
    
    if form2.is_valid():
       # save them    
       # context['form2_message'] = 'Form2 saved'
    else: 
       #save them into context
       context['form2']= form2

    if form1.is_valid() and  form2.is_valid(): 
       #that's mean both form is valid and saved successfully 
       return redirect('page')
    else:
        return render('/page', context)


else:
    form1 = Form1(prefix="form1")
    form2 = Form2(prefix="form2")
从属表单/模型表单(1-1,1-m)/关系表单

一个父窗体和一个子窗体依赖于父窗体。如果两个表单同时保存或检查错误,则我们将使用此方法

if request.method == 'POST':
    form1 = Form1( request.POST,prefix="form1")
    form2 = Form2( request.POST,prefix="form2")
    
    if not form1.is_valid():
       #save them into context
       context['form1']= form1
    
    if not form2.is_valid():
       #save them into context
       context['form2']= form2

    if form1.is_valid() and  form2.is_valid(): 
       #that's mean both form is valid and saved successfully 
       return redirect('page')
    else:
        return render('/page', context)


else:
    form1 = Form1(prefix="form1")
    form2 = Form2(prefix="form2")

是的,我看过这篇文章,但是如果没有一个只有js函数的表单集,这不可能吗?如果我一次提交所有表单,这看起来很好,但是我想同时提交一个配置表单和工具表单。因此,如果我使用自己的提交按钮提交第二个配置表单,那么仪器表单也应该提交。另外3个配置的submit按钮也应该这样做。始终提交我单击的提交按钮的配置表单和仪器表单。如果我的表单提交到不同的代码段,然后再次收集到单个视图,该怎么办?
if request.method == 'POST':
    form1 = Form1( request.POST,prefix="form1")
    form2 = Form2( request.POST,prefix="form2")
    
    if form1.is_valid():
       # save them    
       
       # context['form1_message'] = 'Form1 saved'
    else: 
       #save them into context
       context['form1']= form1
    
    if form2.is_valid():
       # save them    
       # context['form2_message'] = 'Form2 saved'
    else: 
       #save them into context
       context['form2']= form2

    if form1.is_valid() and  form2.is_valid(): 
       #that's mean both form is valid and saved successfully 
       return redirect('page')
    else:
        return render('/page', context)


else:
    form1 = Form1(prefix="form1")
    form2 = Form2(prefix="form2")
if request.method == 'POST':
    form1 = Form1( request.POST,prefix="form1")
    form2 = Form2( request.POST,prefix="form2")
    
    if not form1.is_valid():
       #save them into context
       context['form1']= form1
    
    if not form2.is_valid():
       #save them into context
       context['form2']= form2

    if form1.is_valid() and  form2.is_valid(): 
       #that's mean both form is valid and saved successfully 
       return redirect('page')
    else:
        return render('/page', context)


else:
    form1 = Form1(prefix="form1")
    form2 = Form2(prefix="form2")