Django —— form组件 —— 后端取值
Django —— form组件 —— 后端取值
问题发现
为什么写了这篇博客呢?因为碰到了一个form组件的验证问题。form.is_valid()验证不通过,该给的提示都给了,查看错误form.errors,发现:
<ul class="errorlist"> <li>product_replace_rule
<ul class="errorlist">
<li>Select a valid choice. ['0'] is not one of the available choices.</li>
</ul>
</li>
</ul>
打印该checkbox的值
request.POST.get("product_replace_rule") --> 多选结果仍为单个值
查看前端的Network里请求头:
product_replace_rule: 0
product_replace_rule: 1
post请求传参,仅获取最后一个键值对,故而结果为单个结果,不能通过valid验证。解决:xxxxx(补连接)
CheckboxSelectMultiple的后端取值
request.POST.get("product_replace_rule") --> 1(取最后一个选择) request.POST.getlist("product_replace_rule") --> ['0', '1'],字符串形式
====第二天上班====
不甘心的再搜一下是为什么一直验证不通过吧。终于找到了答案,贴上解决了问题的答案链接:https://stackoverflow.com/questions/746173/form-with-checkboxselectmultiple-doesnt-validate
from django import forms class Myform(forms.Form): aaa = forms.CharField(required=True, max_length=12) bbb = forms.ChoiceField(required=True, choices=( ('1', 'a'), ('2', 'b'), ('3', 'c') ), widget=forms.CheckboxSelectMultiple()) # 错误信息:Select a valid choice. ['2', '3'] is not one of the available choices. # 原因就是bbb字段设定为ChoiceField,这怎么能验证通过呢,应该是MultipleChoiceField啊!!! # 再打印验证后的结果:form.clean_data:{'aaa': '1', 'bbb': ['2', '3']}