여러 개의 제출 버튼 장고 양식을 작성하려면 어떻게 해야 합니까?
이메일을 위한 하나의 입력과 뉴스레터 구독 및 구독 취소를 위한 두 개의 제출 버튼이 있는 양식이 있습니다.
<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
사전.그렇지 않으면 버튼 값을 알 수 있습니까?
예:
if 'newsletter_sub' in request.POST:
# do subscribe
elif 'newsletter_unsub' in request.POST:
# do unsubscribe
사용할 수 있습니다.self.data
에서clean_email
유효성 검사 전에 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
이렇게 할 수도 있고요.
<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>
코드
if request.method=='POST' and 'btnform1' in request.POST:
do something...
if request.method=='POST' and 'btnform2' in request.POST:
do something...
같은 뷰에 대한 하나의 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>
이제는 오래된 질문이지만, 그럼에도 불구하고 저는 같은 문제를 가지고 있었고 저에게 맞는 해결책을 찾았습니다: 저는 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
저는 이것이 오래된 것이라는 것을 알지만, 일부 답변은 간단히 말하면 간략하며, 그들은 양식이 장고 형식이 아닌 일반적인 경우를 다루지 않습니다.
이 솔루션은 이 블로그 게시물에서 영감을 얻었습니다.django에서 파생된 뷰 클래스를 사용합니다.뷰, 뷰, 편집양식 Mixin(예: 보기 만들기, 보기 업데이트 또는 보기 삭제)을 선택합니다.이것들은 요청에 버튼 이름을 표시하는 get_success_url 메서드를 제공합니다.
html
<html>
<body>
<form method="post">
<div>
<label> <input type="radio" name="select-type" value="A">Type A</label>
</div>
<div>
<label> <input type="radio" name="select-type" value="B">Type B</label>
</div>
<div>
<input type="submit" value="Use selected">
</div>
<div>
<input type="submit" name="no-selection" value="None of the above">
</div>
</form>
</body>
</html>
views.py
from django.views.generic import UpdateView
class GetType(UpdateView):
def get(self, request):
return render(request, 'get_type.html', {})
def post(self, request):
button = self.get_success_url()
print(button)
def get_success_url(self):
if 'no-selection' in self.request.POST:
return 'none selected'
return ''
언급URL : https://stackoverflow.com/questions/866272/how-can-i-build-multiple-submit-buttons-django-form
'programing' 카테고리의 다른 글
CSV 파일 데이터를 Postgre로 가져오는 방법SQL 테이블 (0) | 2023.06.10 |
---|---|
각진 2 - 타사 립 추가 (0) | 2023.06.10 |
우선 순위에 따라 status_id인 각 직원에 대해 단일 행 선택 (0) | 2023.06.10 |
VBA를 사용하여 Excel 셀에 공식 작성 (0) | 2023.06.10 |
install.packages()를 실행하기 전에 설치된 패키지를 확인합니다. (0) | 2023.06.05 |