【发布时间】:2016-02-17 15:03:40
【问题描述】:
我有一个空的选择字段,其中包含我在运行时定义的选项:
myfield = SelectField('myfield', validators=[Optional()])
我正在尝试使用如下所示的 GET 请求来完成这项工作:
@app.route('/', methods=['GET'])
def myresponse():
form = myform(csrf_enabled=False)
form.myfield.choices = (('', ''), ('apples', 'apples'), ('pears', 'pears'))
然后,当我尝试在一个空表单上进行验证时。 (我去 myapp.com 没有 GET 参数)
if not form.validate():
return search_with_no_parameters()
else:
return search_with_parameters(form) #this gets run
当我的 search_with_parameters 函数尝试使用表单变量时,它会检查以确保 form.myfield.data 不是 Falsey(不是空字符串)。如果不是 Falsey,则使用该参数进行搜索。如果是 Falsey,则忽略该参数。但是,在提交空表单时,form.myfield.data 是 "None" 作为字符串。并使用"None" 进行搜索。我可以针对"None" 字符串进行验证,但我认为这首先违背了使用此模块的目的。有没有办法让它只返回一个空字符串或真正的None 值?
【问题讨论】:
-
并不是说它有帮助,但它似乎是设计使然:github.com/wtforms/wtforms/blob/master/tests/fields.py#L290
-
我刚刚合并了修复此问题的拉取请求:github.com/wtforms/wtforms/pull/288
标签: wtforms flask-wtforms