Django如何获取包含多个textarea的单个表单的提交数据
问题原因
- 取值逻辑错误:
request.POST存储的是表单内部可提交元素的name属性与对应值的键值对,你尝试获取的compareform是表单本身的name属性,不属于提交的表单字段,因此返回None。 - 表单关联错误:你给textarea设置了
form="compareform"属性用于绑定所属表单,但对应form标签的id是compare,二者不匹配导致textarea没有被纳入提交范围,就算你取textarea的name也拿不到值。 - 非规范问题:两个textarea使用了相同的id
ingredients,HTML要求页面id必须唯一,建议修改避免后续前端逻辑出错。
修复步骤
- 修正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>
- 修正视图函数的取值逻辑
直接通过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
相关产品推荐
相关产品推荐

