python tipos ¿Cómo puedo crear múltiples formularios de envío django?




tipos de formularios en django (4)

También puedes hacer esto,

 <form method='POST'>
    {{form1.as_p}}
    <button type="submit" name="btnform1">Save Changes</button>
    </form>
    <form method='POST'>
    {{form2.as_p}}
    <button type="submit" name="btnform2">Save Changes</button>
    </form>

CÓDIGO

if request.method=='POST' and 'btnform1' in request.POST:
    do something...
if request.method=='POST' and 'btnform2' in request.POST:
    do something...

Tengo un formulario con una entrada para el correo electrónico y dos botones de envío para suscribirse y cancelar la suscripción al boletín informativo:

<form action="" method="post">
{{ form_newsletter }}
<input type="submit" name="newsletter_sub" value="Subscribe" />
<input type="submit" name="newsletter_unsub" value="Unsubscribe" />
</form>

También tengo forma de clase:

class NewsletterForm(forms.ModelForm):
    class Meta:
        model = Newsletter
        fields = ('email',)

Debo escribir mi propio método clean_email y necesito saber por qué botón se envió el formulario. Pero el valor de los botones de enviar no está en el diccionario self.cleaned_data . ¿Podría obtener valores de botones de lo contrario?


P.ej:

if 'newsletter_sub' in request.POST:
    # do subscribe
elif 'newsletter_unsub' in request.POST:
    # do unsubscribe

Puede usar self.data en el método clean_email para acceder a los datos POST antes de la validación. Debe contener una clave llamada newsletter_sub o newsletter_unsub dependiendo de qué botón se haya pulsado.

# in the context of a django.forms form

def clean(self):
    if 'newsletter_sub' in self.data:
        # do subscribe
    elif 'newsletter_unsub' in self.data:
        # do unsubscribe

una url a la misma vista! ¡al igual que!

###urls.py###
url(r'^$', views.landing.as_view(), name = 'landing'),

####views.py####
class landing(View):
    template_name = '/home.html'
    form_class1 = forms.pynamehere1
    form_class2 = forms.pynamehere2
        def get(self, request):
            form1 = self.form_class1(None)
            form2 = self.form_class2(None)
            return render(request, self.template_name, { 'register':form1, 'login':form2,})

         def post(self, request):
             if request.method=='POST' and 'htmlsubmitbutton1' in request.POST:
                    ## do what ever you want to do for first function ####
             if request.method=='POST' and 'htmlsubmitbutton2' in request.POST:
                     ## do what ever you want to do for second function ####
                    ## return def post###  
             return render(request, self.template_name, {'form':form,})


####/home.html####
#### form 1 ####
<form action="" method="POST" >
  {% csrf_token %}
  {{ register.as_p }}
<button type="submit" name="htmlsubmitbutton1">Login</button>
</form>
#### form 2 ####
<form action="" method="POST" >
  {% csrf_token %}
  {{ login.as_p }}
<button type="submit" name="htmlsubmitbutton2">Login</button>
</form>




submit