Django-检测页面中提交了哪种表单

时间:2018-07-29 04:12:17

标签: django django-models django-forms

我在同一页面上有多个表单字段和多个提交按钮。我想检测通过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请求?

2 个答案:

答案 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...)
...