是否可以提交两种不同的表格,在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
答案 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")