Saltar al contenido

django envía dos formularios diferentes con un botón de envío

Solución:

En lugar de tener múltiples <form ..> etiquetas en html, use solo una <form> etiquetar y agregar campos de todos los formularios debajo de él.

Ejemplo en plantilla

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

Entonces, cuando el usuario envíe el formulario, obtendrá todos los datos de los formularios a la vista, luego podrá hacer lo que está haciendo a la vista. Como

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

Es mejor usar form prefix en esos casos.

Para que puedas hacer

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

Extendiendo el @Rohan responder y agregar más control sobre los formularios.

Formularios no dependientes / Sin relación / Guardar cualquier formulario de varios formularios

Compruebe individualmente cada formulario para comprobar qué formularios no son válidos. Luego, guárdelos en contexto si contienen errores o rediríjalos.

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

Formas dependientes / Forma de modelo (1-1,1-m) / Forma de relación

Un formulario principal y un formulario secundario que depende del formulario principal. Si ambos formularios se guardan o verifican errores al mismo tiempo, usaremos este método.

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")
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *