2013-08-28 13 views
19

è possibile inviare due forme diverse, con un pulsante di invio in django? Ho un modulo chiamato "strumento" e 4 moduli uguali "config". ora mi piacerebbe inviare sempre una configurazione e uno strumento. per esempio. instrument + config 1 e instrument + config 2. e ogni configurazione ha il proprio pulsante di invio.django invia due forme diverse con un pulsante di invio

ho provato con un pulsante a forma di configurazione:

<input onclick="submitForms()" class="btn btn-primary cfg" type="submit" value="Start" > 

e chiamare una funzione js 'onclick':

submitForms = function(){ 
    console.log('ok'); //only for testing 
    document.forms["firstForm"].submit(); 
    document.forms["secondForm"].submit(); 
} 

questo è il mio metodo nel 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

possibile duplicato di [Come presento le forme multiple con un unico pulsante di invio in Django?] (Http://stackoverflow.com/questions/15124567/how-do- i-submit-multiple-forms-with-a-single-submit-button-in-django) –

+0

sì, ho visto questo post, ma non è possibile farlo senza un formset solo con una funzione js? – user2412771

risposta

38

invece di avere più <form ..> tag in HTML, usare un solo <form> tag e aggiungi campi di tutti i moduli sotto di esso.

Esempio nel modello

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

Così quando l'utente invia il modulo si ottengono tutti i dati dei moduli in vista, allora si può fare quello che stai facendo in vista. Come

if request.method == 'POST': 
     form1 = Form1(request.POST) 
     form2 = Form2(request.POST) 
     print(request.POST) 
     if form1.is_valid() or form2.is_valid(): 

è più opportuno utilizzare form prefix in questi casi.

Così si può fare

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

questo sembra a posto se vorrei inviare tutti i moduli in una volta, ma mi piacerebbe inviare un modulo di configurazione e il modulo dello strumento allo stesso tempo. quindi, se invio il secondo modulo di configurazione con il proprio pulsante di invio, dovrebbe anche presentare il modulo dello strumento. e il pulsante di invio per l'altra configurazione 3 dovrebbe fare lo stesso. invia sempre il modulo di configurazione sul pulsante di invio su cui ho fatto clic e sul modulo dello strumento. – user2412771

Problemi correlati