djangoの1つの送信ボタンで2つの異なるフォームを送信することは可能ですか? 「instrument」という1つのフォームと「config」という4つの同じフォームがあります。今、私は常に1つの構成と機器を提出したいと思います。例えばinstrument + config 1、instrument + config 2、およびすべてのconfigには独自の送信ボタンがあります。
私は設定フォームの1つのボタンでそれを試しました:
<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
Htmlに複数の<form ..>
タグを置く代わりに、<form>
タグを1つだけ使用して、その下にあるすべてのフォームのフィールドを追加します。
テンプレートの例
<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")
@ 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)/関係フォーム
親フォームに依存する1つの親フォームと1つの子フォーム。両方のフォームが同時に保存またはチェックされたエラーの場合、このメソッドを使用します。
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")