use*_*909 7 wtforms flask-wtforms
我有一个空的选择字段,其中包含我在运行时定义的选项:
myfield = SelectField('myfield', validators=[Optional()])
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用看起来像这样的GET请求:
@app.route('/', methods=['GET'])
def myresponse():
form = myform(csrf_enabled=False)
form.myfield.choices = (('', ''), ('apples', 'apples'), ('pears', 'pears'))
Run Code Online (Sandbox Code Playgroud)
然后当我尝试在空表格上验证时.(我没有GET参数去myapp.com)
if not form.validate():
return search_with_no_parameters()
else:
return search_with_parameters(form) #this gets run
Run Code Online (Sandbox Code Playgroud)
当我的search_with_parameters函数尝试使用表单变量时,它会检查以确保它form.myfield.data不是Falsey(不是空字符串).如果它不是Falsey,则使用该参数进行搜索.如果为Falsey,则忽略该参数.但是,在空表单提交时,form.myfield.data是"None"一个字符串."None"完成搜索.我可以验证"None"字符串,但我认为这首先打败了使用该模块的目的.有没有办法让它只返回一个空字符串或真正的None值?
我发现添加default空字符串的参数可以解决问题.
看来这是支持空字符串作为选项/选项的必要条件SelectField.
例:
myfield = wtf.fields.SelectField(
u"My Field",
validators=[wtf.validators.Optional()],
choices=[(('', ''), ('apples', 'apples'), ('pears', 'pears'))],
default=''
)
Run Code Online (Sandbox Code Playgroud)
好的,我为此做了一个解决方法。我向该coerce字段添加了一个定义,并将空值从更改为'',0如下所示:
myfield = SelectField('myfield', validators=[Optional()], coerce=int)
...
form.myfield.choices = ((0, ''), (1, 'apples'), (2, 'pears'))
Run Code Online (Sandbox Code Playgroud)
当然,这仅行得通,因为我的实际数据使用整数作为值。我不确定如果我的数据是字符串怎么办。
| 归档时间: |
|
| 查看次数: |
3234 次 |
| 最近记录: |