tipos relaciones personalizados modelos formularios form ejemplos avanzados python button django-forms submit

python - relaciones - submit django form



¿Cómo puedo crear múltiples formularios de envío django? (5)

Ahora es una vieja pregunta, sin embargo, tuve el mismo problema y encontré una solución que funciona para mí: escribí MultiRedirectMixin.

from django.http import HttpResponseRedirect class MultiRedirectMixin(object): """ A mixin that supports submit-specific success redirection. Either specify one success_url, or provide dict with names of submit actions given in template as keys Example: In template: <input type="submit" name="create_new" value="Create"/> <input type="submit" name="delete" value="Delete"/> View: MyMultiSubmitView(MultiRedirectMixin, forms.FormView): success_urls = {"create_new": reverse_lazy(''create''), "delete": reverse_lazy(''delete'')} """ success_urls = {} def form_valid(self, form): """ Form is valid: Pick the url and redirect. """ for name in self.success_urls: if name in form.data: self.success_url = self.success_urls[name] break return HttpResponseRedirect(self.get_success_url()) def get_success_url(self): """ Returns the supplied success URL. """ if self.success_url: # Forcing possible reverse_lazy evaluation url = force_text(self.success_url) else: raise ImproperlyConfigured( _("No URL to redirect to. Provide a success_url.")) return url

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


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...


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>