我在同一页面上有多个表单字段和多个提交按钮。我想检测通过POST请求触发的表单域。
我正在使用CBV
,而我的post()
方法具有以下特点:
def post(self, request, **kwargs):
....
form1 = Form1(request.POST, instance=Model1.objects.filter(some_filtering...)
form2 = Form2(request.POST, instance=Model2.objects.filter(some_filtering...)
form3 = Form3(request.POST, instance=Model3.objects.filter(some_filtering...)
form4 = Form4(request.POST, instance=Model4.objects.filter(some_filtering...)
# this is the code I want to know
if POST request is triggered by form1...
# do something....
return super().post(request, **kwargs)
return super().post(request, **kwargs)
如何检测哪种形式触发了POST请求?
答案 0 :(得分:1)
我是通过在HTML模板中使用input
标签而不是button
标签来提交表单的方式
<form name="form-1" method="POST" action="{% url 'view_url_name'%}">
{% csrf_token %}
{{ form }}
<!--use input tag for submit button -->
<input class="btn mt-3 btn-primary" name="form-1-submit" value="Submit" type="submit"/>
</form>
注意:对于每个表单提交输入,请使用不同的名称。
现在,在您的视图中,您只需检查按钮的name
属性即可。
if 'form-1-submit' in request.POST:
form1 = Form1(request.POST, instance=Model1.objects.filter(some_filtering...)
...
# and so on
此实现还将涵盖您所处的场景 通过不同的按钮提交相同的
form
,以将form
数据用于不同的 目的。
答案 1 :(得分:0)
您可以像这样在表单中使用隐藏的输入
<input name="formId" value="1" type="hidden"/>
... <!-- in second form --!>
<input name="formId" value="2" type="hidden"/>
然后在您的视图中检查提交的表单
if request.POST.get("formId") == "1":
form1 = Form1(request.POST, instance=Model1.objects.filter(some_filtering...)
elif request.POST.get("formId") == "2":
form1 = Form2(request.POST, instance=Model1.objects.filter(some_filtering...)
...