You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django POST方法无法接收HTML表单全部字段问题求助

Django POST无法接收表单全部字段的问题排查与解决

问题原因

  1. HTML表单嵌套违反规范:主表单checklistForm内部嵌套了两个独立的<form>标签,HTML标准明确禁止表单嵌套。浏览器解析时会自动修正这种无效结构,导致嵌套表单内的控件无法被包含在主表单的提交数据中,这是仅能获取location字段的核心原因。
  2. 视图字段名与表单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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:05:20