社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

Grayson Pike • 5 年前 • 1576 次点击  

我有一个简单的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
 
1576 次点击  
文章 [ 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