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

hmae6n7t  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(153)

是否可以在django中使用一个提交按钮提交两个不同的表单?我有一个叫做“仪器”的形式和四个等价的形式“配置”。现在我想提交总是一个配置和仪器.例如,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

nszi6y05

nszi6y051#

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

f2uvfpb9

f2uvfpb92#

扩展**@罗汉**答案,并增加对表单的更多控制。

非依赖表单/无关系/多个表单中保存任意表单

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

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

but5z9lq

but5z9lq3#

我没有得到太多的运气与上述,但我一直在使用脆的形式。所以我做的方式,最后我有不同的形式,但在脆的形式,我设置self.help.form_tag = False,这样我只携带HTML表单标签和其余eventhough是表单,我可以指定它在HTML我可以提交所有数据在一起

相关问题