2013-08-28 13 views
19

djangoに1つの送信ボタンを付けて2つの異なるフォームを送信できますか? 私は "instrument"と "equal"という4つのフォームを持っています。今私は常に1つの設定と機器を提出したいと思います。例えばinstrument + config 1、およびinstrument + config 2.およびすべての設定には独自の送信ボタンがあります。djangoは1つの送信ボタンで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

可能複製を行うことができます[私はジャンゴで、単一の送信ボタンで複数のフォームを提出するにはどうすればよいです?](http://stackoverflow.com/questions/15124567/how-do- i-submit-multiple-forms-with-a-django) –

+0

ええ、私はこの投稿を見ましたが、js関数のみでformsetなしではできません。 – user2412771

答えて

38

複数の<form ..>タグをhtmlにする代わりに、<form>タグを追加し、その下にあるすべてのフォームのフィールドを追加します。ユーザーがフォームを送信する際

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

テンプレート

例は、だから、あなたはあなたがビューでやっていることを行うことができますが、ビュー内のすべてのフォームデータを取得します。 As

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

一度にすべてのフォームを提出すればこれはうまく見えますが、同時に1つの設定フォームと計器フォームを提出したいと思います。私が自分の送信ボタンで2番目の設定フォームを提出すると、機器フォームも提出する必要があります。他の3つの設定の送信ボタンも同じ操作を行う必要があります。私がクリックした送信ボタンと機器フォームを送信してください。 – user2412771