我已经定义了一个布尔字段,如下所示。
f = BooleanField(validators=[InputRequired()], false_values=(False, 'false', 'False', ''))
输入是{"f" : False}
之类的python对象,因为它们 JSON提交。
form = LocationEditForm(obj=request.get_json())
此表单处理输入:
似乎InputRequired必须验证该字段是否存在,而False输入触发"字段不存在"代码路径。
我该如何解决?
我还需要InputRequired才能在未提交字段时触发错误。
答案 0 :(得分:1)
代码意味着将if not [truthy value]
意外触发检查为if not False
,因此我分叉了InputRequired。此外,BooleanField将"false"
和""
视为唯一的虚假值。因此,请将False
包括为falsy。
定义这些:
class BooleanRequired(object):
"""
Fork of wtforms.validators.InputRequired
"""
field_flags = ('required', )
def __init__(self, message=None):
self.message = message
def is_correct(self, raw_data):
try:
return raw_data[0] in [True, False]
except TypeError:
return raw_data in [True, False]
def __call__(self, form, field):
if not self.is_correct(field.raw_data):
if self.message is None:
message = field.gettext('This field is required.')
else:
message = self.message
field.errors[:] = []
raise StopValidation(message)
BOOLEAN_KWARGS = {
'validators': [BooleanRequired(message="message")],
'false_values': (False,)
}
使用类似:
a = BooleanField(**BOOLEAN_KWARGS)