如何在Django的视图中在一个函数中处理多个表单

2024-03-29 12:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在一个函数中处理两种形式:

HTML页面

<form name="selectgenderform" method = "POST">
  <select name='gender'>
   <option>Male</option>
   <option>Female</option>  
  </select>
 <input type = 'submit' name ='searchbtn' value= 'search' >
</form>


<form name="selectionform" method = "POST">
  <input type = 'hidden' name = 'valueofnumber' >
 <input type = 'submit' name = 'searchbtn' value= 'search' >
</form>

Views.py

 def formselection(request):
   if selectgenderform in request.POST:
     gender = request.POST.get('gender')
     ...

   elif selectionform in request.POST:
     value = request.POST.get('valueofnumber') 

我的查询是在一个函数中处理多个表单,但这不会符合我的要求


Tags: 函数nameforminputvaluerequesttypegender
2条回答

您可以传递多个表单并使用单个函数处理它。然而,诀窍是将表单保存在模板中的一个表单标记下。(请容忍我在手机上打字)

views.py

def yourView(request):
    form1 = form1()
    form2 = form2()

    if request.method == "post":
        form1 = form1(request.POST)
        form2 = form2(request.POST)

        if form1.is_valid():
            #do something
        if form2.is_valid():
            #do something else 
   contest = { "form1": form1, "form2": form2 }
   return render(request, 'template.html', context=context)

template.html

    <form method="POST">
        {%csrf_token%}
        {{form1.as_p}}
        {{form2.as_p}}
    <button type="submit"> Submit </button>
    </form>

如果要保留两个单独的表单:

if request.method == "POST" and "selectgenderform" in request.POST:
    *something*

if request.method == "POST" and "selectionform" in request.POST:
    *something*

您可能还必须将提交输入名称更改为“SelectGenPerform”和“selectionform”

相关问题 更多 >