django提交两个不同的表单,一个提交按钮

时间:2013-08-28 13:31:14

标签: python django forms

是否可以提交两种不同的表格,在django中有一个提交按钮? 我有一个称为“乐器”的表格和4个相同的表格“配置”。现在我想提交一个配置和仪器。例如instrument + config 1和instrument + config 2.每个配置都有自己的提交按钮。

我在配置表单中使用了一个按钮尝试了它:

<input onclick="submitForms()" class="btn btn-primary cfg" type="submit" value="Start" >

并调用js函数'onclick':

submitForms = function(){
    console.log('ok'); //only for testing
    document.forms["firstForm"].submit();
    document.forms["secondForm"].submit();
}

这是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

2 个答案:

答案 0 :(得分:44)

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

模板中的示例

<form >
    {{ form1.as_p }}
    {{ form2.as_p }}
    {{ form3.as_p }}
</form>

因此,当用户提交表单时,您将获取视图中的所有表单数据,然后您可以在视图中执行您正在执行的操作。如

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

在这种情况下,最好使用form prefix

所以你可以做到

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")

答案 1 :(得分:0)

扩展 @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")