[PYTHON] 어떻게 여러 제출 버튼 장고 양식을 만들 수 있습니까?
PYTHON어떻게 여러 제출 버튼 장고 양식을 만들 수 있습니까?
나는 전자 우편에 대한 하나의 입력 양식과 뉴스 레터 구독 및 탈퇴 버튼 2 개가있는 양식이 있습니다.
<form action="" method="post">
{{ form_newsletter }}
<input type="submit" name="newsletter_sub" value="Subscribe" />
<input type="submit" name="newsletter_unsub" value="Unsubscribe" />
</form>
나 또한 클래스 형식이 있습니다 :
class NewsletterForm(forms.ModelForm):
class Meta:
model = Newsletter
fields = ('email',)
나 자신의 clean_email 메소드를 작성해야하며 제출 된 양식이 어떤 버튼인지 알아야합니다. 그러나 제출 버튼의 값은 self.cleaned_data 사전에 없습니다. 그렇지 않으면 버튼 값을 얻을 수 있습니까?
해결법
-
==============================
1.유효성 검사 전에 clean_email 메소드에서 self.data를 사용하여 POST 데이터에 액세스 할 수 있습니다. 어떤 단추를 눌렀는지에 따라 newsletter_sub 또는 newsletter_unsub라는 키가 있어야합니다.
유효성 검사 전에 clean_email 메소드에서 self.data를 사용하여 POST 데이터에 액세스 할 수 있습니다. 어떤 단추를 눌렀는지에 따라 newsletter_sub 또는 newsletter_unsub라는 키가 있어야합니다.
# 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
-
==============================
2.예 :
예 :
if 'newsletter_sub' in request.POST: # do subscribe elif 'newsletter_unsub' in request.POST: # do unsubscribe
-
==============================
3.당신도 이렇게 할 수 있습니다.
당신도 이렇게 할 수 있습니다.
<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>
암호
-
==============================
4.지금은 오래된 질문입니다. 그럼에도 불구하고 나는 똑같은 문제를 안고 있고 저에게 잘 맞는 해결책을 발견했습니다 : 나는 MultiRedirectMixin을 썼습니다.
지금은 오래된 질문입니다. 그럼에도 불구하고 나는 똑같은 문제를 안고 있고 저에게 잘 맞는 해결책을 발견했습니다 : 나는 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
-
==============================
5.동일한 전망에 1 개의 URL! 그렇게!
동일한 전망에 1 개의 URL! 그렇게!
###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>
from https://stackoverflow.com/questions/866272/how-can-i-build-multiple-submit-buttons-django-form by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 명령 줄 인수를 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2018.10.16 |
---|---|
[PYTHON] 장고의 login_required를 만드는 가장 좋은 방법은 기본값입니다. (0) | 2018.10.16 |
[PYTHON] virtualenv에 환경 변수 설정하기 (0) | 2018.10.16 |
[PYTHON] 포스트그레스 : 이미 존재하지 않는 INSERT (0) | 2018.10.16 |
[PYTHON] pip 설치가 github에서 작동 할 수 있도록 구성 (0) | 2018.10.16 |