2013-08-28 183 views
19

是否可以提交兩種不同的形式,在Django中提交一個按鈕? 我有一種稱爲「儀器」的形式和4個相同的形式「配置」。現在我想總是提交一個配置和工具。例如儀器+配置1和儀器+配置2,每個配置都有自己的提交按鈕。django提交兩個不同的表單提交一個按鈕

我有在配置表格一個鍵試了一下:

<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

可能重複[我如何提交多種形式與Django的一個提交按鈕?](http://stackoverflow.com/questions/15124567/how-do- i-submit-multiple-forms-with-a-single-submit-button-in-django) –

+0

是的,我看過這篇文章,但不可能做到這一點,沒有一個只有js函數的formset? – user2412771

回答

38

而不是在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") 
+0

這看起來很好,如果我一次提交所有表單,但我想同時提交一個配置表單和儀器表單。所以如果我用他自己的提交按鈕提交第二個配置表單,儀器表單也應該提交。並且其他3配置的提交按鈕也應該這樣做。總是提交我點擊提交按鈕的配置表單和儀器表單。 – user2412771