Python Django,如何在一页中添加两个表单?
我是django的新手,我的问题很简单。如何在同一页中添加两个表单?我尝试了很多方法,比如在视图中创建一个类或添加第二个URL路径,但没有找到方法。谢谢你的帮助 这是我的代码: forms.pyPython Django,如何在一页中添加两个表单?,python,django,forms,Python,Django,Forms,我是django的新手,我的问题很简单。如何在同一页中添加两个表单?我尝试了很多方法,比如在视图中创建一个类或添加第二个URL路径,但没有找到方法。谢谢你的帮助 这是我的代码: forms.py class scrap_info(forms.Form): url = forms.CharField(label="Urls") website = forms.ChoiceField(label="Website", choices=ask_website) class sms_
class scrap_info(forms.Form):
url = forms.CharField(label="Urls")
website = forms.ChoiceField(label="Website", choices=ask_website)
class sms_info(forms.Form):
data = forms.ChoiceField(label="Data list", choices=ask_data)
number = forms.CharField(label="Sms number")
views.py
def scrap_app(request):
form1 = scrap_info(request.POST or None)
return render(request, "sms/scrap_app.html", {'form1': form1})
def sms_app(request):
form2 = sms_info(request.POST or None)
return render(request, "sms/sms_app.html", {"form2": form2})
scrape_app.html
<body>
<div>
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-outline-info" type="submit" value="Save">SCRAP</button>
</form>
</div>
</body>
我最近遇到了这个问题,我通过在每个表单上添加一个隐藏字段来解决它,并通过在视图中使用if条件来获取隐藏值来确定提交了哪个表单 下面是我如何使用CBV完成的 视图.py yourtemplate.html
{%csrf_令牌%}
{{form1}}
询价
{%csrf_令牌%}
{{form2}}
投诉
正如您所看到的,在每个名为“action”的表单中都有一个隐藏值,该值将用于确定提交了哪个表单。请参见此
urlpatterns = [
path("/scrap_app", views.scrap_app, name="scrap_app"),
]
class ContactUsView(TemplateView):
template_name = 'yourtemplate.html'
def get(self, request, *args, **kwargs):
inquiry_form = InquiryForm(self.request.GET or None, prefix='inquiry_form')
complaint_form = ComplaintForm(self.request.GET or None, prefix='complaint_form')
context = self.get_context_data(**kwargs)
context['complaint_form'] = complaint_form
context['inquiry_form'] = inquiry_form
return self.render_to_response(context)
def post(self, request):
# instantiate all unique forms (using prefix) as unbound
inquiry_form = InquiryForm(prefix='inquiry_form')
complaint_form = ComplaintForm(prefix='complaint_form')
# determine which form is submitting (based on hidden input called 'action')
action = self.request.POST['action']
# bind to POST and process the correct form
if action == 'inquiry':
inquiry_form = InquiryForm(data=request.POST, prefix='inquiry_form')
if inquiry_form.is_valid():
# Your logic here
return self.render_to_response(
self.get_context_data(
inquiry_form=inquiry_form,
complaint_form=complaint_form,
)
)
messages.error(self.request,
'Inquiry form is invalid.')
elif action == 'complaint':
complaint_form = ComplaintForm(data=request.POST, prefix='complaint_form')
if complaint_form.is_valid():
# Your logic here
return self.render_to_response(
self.get_context_data(
inquiry_form=inquiry_form,
complaint_form=complaint_form,
)
)
messages.error(self.request,
'Complaint form is invalid.')
# prep context
context = {
'inquiry_form': inquiry_form,
'complaint_form': complaint_form,
}
return render(request, self.template_name, context)
<!-- First Form -->
<form action="" method="post" role="form">
{% csrf_token %}
<input type='hidden' name='action' value='inquiry'>
{{ form1 }}
<button type="submit" title="Send Inquiry">Send Inquiry</button>
</form>
<!-- Second Form -->
<form action="" method="post" role="form">
{% csrf_token %}
<input type='hidden' name='action' value='complaint'>
{{ form2 }}
<button type="submit" title="Send Complaint">Send Complaint</button>
</form>