WTForms BooleanField将JSON false值视为true

时间:2016-06-29 01:24:22

标签: python json flask wtforms flask-wtforms

我正在使用wtforms来处理我的帖子请求中的数据。一个特定的发布请求发送包括布尔值的各种数据。

我的表单如下:

class EditFileForm(Form):
    title = StringField('title')
    shared = BooleanField('shared')
    fileID = IntegerField('fileID')
    userID = IntegerField('userID')

我可以看到,当我收到请求时,数据如下所示:

data = MultiDict(mapping=request.json)
print(data)
>>MultiDict([(u'shared', False), (u'title', u'File5'), (u'userID', 1), (u'fileID', 16)])

您可以看到布尔字段为“false”,打印原始数据也显示出来但是,当我打印实际表单字段时,我得到了真实。

print(form.shared.raw_data)
[False]
print(form.shared.data)
True

我读到WTForms可能不知道如何处理错误的布尔值。这样做的正确方法是什么?使用IntegerField代替?

我有另一个带有booleanfield的表单,它正在处理来自postgres数据库的错误布尔值。

1 个答案:

答案 0 :(得分:11)

WTForms并不真正意味着使用JSON数据。在这种情况下, var i; for (i=1; i<=6; i++) { $('.testimonial-'+i).each(function(event){ $(this).find('a.read-more-testimonial-'+i).click(function(event){ var j; var k=200; event.preventDefault(); for (j=1; j<=6; j++) { if (i=j) { $('.initial-blockquote-testimonial-'+j).hide(); $('.blockquote-testimonial-'+j).fadeIn(1000).show(); $('.testimonial-'+j).addClass('col-sm-12').removeClass('col-sm-4'); } else { $('.initial-blockquote-testimonial-'+j).fadeIn(j*k).show(); $('.blockquote-testimonial-'+j).hide(); $('.testimonial-'+j).addClass('col-sm-4').removeClass('col-sm-12'); } } }); }); } 会检查其收到的值是否为BooleanField,默认为field.false_values('false', '')对象不在那里,所以它被认为是真的。

您可以将另一组False传递给该字段。

false_values

或者通过在第一次使用该字段之前将其放置在某处来为所有实例修补它。

BooleanField(false_values={False, 'false', ''})

最好使用Marshmallow等序列化库来处理JSON数据。