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. [&#39;0&#39;] 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']}

 

posted @ 2018-12-17 11:11  乖巧Clare  阅读(61)  评论(0)    收藏  举报