Django POST方法无法接收HTML表单全部字段问题求助
Django POST无法接收表单全部字段的问题排查与解决
问题原因
- HTML表单嵌套违反规范:主表单
checklistForm内部嵌套了两个独立的<form>标签,HTML标准明确禁止表单嵌套。浏览器解析时会自动修正这种无效结构,导致嵌套表单内的控件无法被包含在主表单的提交数据中,这是仅能获取location字段的核心原因。 - 视图字段名与表单
name不匹配:表单中band_pma、band_pmo的name属性,在视图中被错误写成了bandPMA、bandPMO,大小写和下划线格式不统一,导致即使字段被提交也无法获取到值。
解决方案
1. 移除嵌套的表单标签
修改嵌入模板home/1_resource-request.html,删除其中的两个<form>及对应闭合标签,让所有表单控件直接归属外层主表单:
{% block stylesheets %}{% endblock stylesheets %} {% block content %} <div class="pcoded-content"> <div class="pcoded-inner-content"> <div class="main-body"> <div class="page-wrapper"> <div class="row"> <div class="col-sm-12"> <div class="card"> <div class="card-header"> <h5>Resource Request</h5> </div> <div class="card-body"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label for="checklistID">Checklist Number</label> <input type="text" class="form-control" id="checklistID" name="checklistnum" placeholder="123456" disabled/> </div> <div class="form-group"> <label for="location_ID">CMPA Location</label> <select class="form-control" id="location_ID" name="location"> <option selected>Select</option> <option>Brazil</option> <option>Canada</option> <option>Mexico</option> <option>SSA</option> <option>United States</option> </select> </div> </div> <div class="col-md-6"> <div class="form-group"> <label for="support_id">CMPA Support Needed</label> <select class="form-control" id="support_id" name="support"> <option selected>Select</option> <option>Both</option> <option>PMA - Financial Management</option> <option>PMO - Project Administration</option> </select> </div> <div class="form-group"> <label for="band_pma_id">Band (PMA)</label> <select class="form-control" id="band_pma_id" name="band_pma"> <option selected>Select</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> </select> <small id="textInfo1" class="form-text text-muted">There is no B4 for US and CA - in progress.</small> </div> <div class="form-group"> <label for="band_pmo_id">Band (PMO)</label> <select class="form-control" id="band_pmo_id" name="band_pmo"> <option selected>Select</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> </select> <small id="textInfo2" class="form-text text-muted" >There is no B4 for US and CA - in progress.</small > </div> <div class="mt-3"> <button class="button btn-navigate-form-step" type="button" step_number="2">Next</button> <button class="button2 btn btn-outline-primary " type="submit">Save</button> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> {% endblock content %}
2. 修正视图中的字段名
修改views.py中字段获取的代码,确保与表单name属性完全匹配:
def save_request(request): if request.method == 'POST': context = {} location = request.POST.get('location', None) support = request.POST.get('support', None) band_PMA = request.POST.get('band_pma', None) band_PMO = request.POST.get('band_pmo', None) ippf = request.POST.get('ippf', None) print(location, support, band_PMA, band_PMO, ippf) return render(request, 'home/create-request.html', context=context)
内容的提问来源于stack exchange,提问作者Leticia Gisele
相关产品推荐
相关产品推荐

