You need to enable JavaScript to run this app. Django如何获取包含多个textarea的单个表单的提交数据
优惠活动
大模型
产品
解决方案
定价
更多

Django如何获取包含多个textarea的单个表单的提交数据

问题原因

  • 取值逻辑错误:request.POST存储的是表单内部可提交元素的name属性与对应值的键值对,你尝试获取的compareform是表单本身的name属性,不属于提交的表单字段,因此返回None。
  • 表单关联错误:你给textarea设置了form="compareform"属性用于绑定所属表单,但对应form标签的id是compare,二者不匹配导致textarea没有被纳入提交范围,就算你取textarea的name也拿不到值。
  • 非规范问题:两个textarea使用了相同的idingredients,HTML要求页面id必须唯一,建议修改避免后续前端逻辑出错。

修复步骤

  1. 修正HTML表单与textarea的关联
    你可以选择将form标签的id改为compareform,或者把所有textarea的form属性改为compare,示例修改如下:
<!-- 修改form标签的id和你textarea的form属性一致 -->
<form action="{% url 'compare_ingredients' %}" method="POST" name="compareform" id="compareform">
  {% csrf_token %}
  <!-- 其他原有内容不变 -->
  <textarea name="ingredients1" id="ingredients1" cols="30" rows="10" form="compareform"></textarea>
  <!-- 第二个textarea修改id -->
  <textarea name="ingredients2" id="ingredients2" cols="30" rows="10" form="compareform"></textarea>
</form>
  1. 修正视图函数的取值逻辑
    直接通过textarea的name属性获取对应输入内容:
def compare_ingredients(request):
    if request.method == "POST":
        # 分别获取两个textarea的内容
        ingredients1 = request.POST.get('ingredients1')
        ingredients2 = request.POST.get('ingredients2')
        print(ingredients1, ingredients2)
    return render(request, 'result/compare.html')

内容的提问来源于stack exchange,提问作者mac95782

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:33:03