Py学习  »  Django

针对布尔值的Django表单验证不起作用

Grayson Pike • 5 年前 • 1622 次点击  

我有一个简单的HTML表单,我正试图用Django表单验证它。问题是,Django的表单验证将只识别 is_kit 如果是 'True' . (当它是 'False' ,它将给出一个错误,说明该字段是必需的。这是表格:

<form method="post"> {% csrf_token %}
    <input type="hidden" name="part_id" value="{{ part.id }}" />
    <input type="hidden" name="is_kit" value="False" />
    <input type="submit" class="btn btn-link" value="Add to Cart"/>
</form>

这是Django表格:

class AddItemToCartForm(forms.Form):
    part_id = forms.IntegerField()
    is_kit = forms.BooleanField()

以下是我观点的相关部分:

def post(self, request, id):
    print(request.POST)
    print(request.POST.get('is_kit'))
    form = AddItemToCartForm(request.POST)
    print(form.errors)

我的服务器给出的输出如下:

<QueryDict: {'is_kit': ['False'], 'part_id': ['1'], 'csrfmiddlewaretoken': ['X2vkpwG6GJmK79vypFPAveTzVkrxBauJWgfnRvAtJVcZ8NwBokjQhCnfGN9dFFYF']}>
False
<ul class="errorlist"><li>is_kit<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

我认为我的模板应该可以工作,因为 the source code , forms.BooleanField 应转换字符串 “假” 在发布数据到python中 False 价值。

正如我上面提到的,如果 伊萨克试剂盒 设置为 “真” .

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37933
 
1622 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Cyrlop
Reply   •   1 楼
Cyrlop    6 年前

你需要添加 required=False 对你 BooleanField :

class AddItemToCartForm(forms.Form):
    part_id = forms.IntegerField()
    is_kit = forms.BooleanField(required=False)
JPG
Reply   •   2 楼
JPG    6 年前

From the doc ,

因为所有的字段子类 required=True 默认情况下,这里的验证条件很重要。如果要在窗体中包含一个布尔值,该布尔值可以是 True False (例如,选中或未选中的复选框),您必须记住传入 required=False 当创建 BooleanField .



所以,添加 要求=假 在里面 BooleanField() 作为,

class AddItemToCartForm(forms.Form):
    part_id = forms.IntegerField()
    is_kit = forms.BooleanField(required=False)


附加信息 :
如果未选中该复选框,浏览器将不会发送请求的发布参数中的字段。如果不指定字段是可选的,Django将在不在post参数中时将其视为缺少的字段。

参考文献 : SO Post