我使用以下代码在python中创建了一个SelectField:
condition = SelectField(u'Condition', choices = [(1,condition_string[5]),(2, condition_string[4]),(3, condition_string[3]),(4, condition_string[2]),(5, condition_string[1])], validators =[validators.Required(message=u'Must enter the condition of the book')])
我的问题是:当用户提交他们的选择时,将从html返回什么: 它会从condition_string []返回一个值,还是会返回它在列表中排序的数字, 例如:如果使用选择第一个选项,它将返回' 1'或来自condition_string [5]的值?
答案 0 :(得分:0)
都不是。
来自WTForms docs:
选择字段保留选项属性,该属性是(值,标签)对的序列。值部分理论上可以是任何类型,但是当表单数据由浏览器作为字符串发送时,您需要提供一个函数,该函数可以将字符串表示强制转换回类似的对象。
(形成错误的)问题是,
"将从html返回什么内容?"
我假设您要问的是:
处理从浏览器收到的数据后,
condition.data
的价值是多少?
答案是:一个字符串。它可以是字面上任何字符串 - 这就是你必须验证的原因。
但如果用户正在合作,则浏览器会将值作为字符串发回,而condition.data
将返回u'1'
或{{1}请注意值是(value,label)对的第一个元素,不一定是u'2'
列表中的位置。
原样,该字段永远不会验证,因为值(choices
s)提供的数字与字符串数据(默认情况下强制转换为unicode)不匹配。这就是文档说"you will need to provide a function which can coerce the string representation back to a comparable object."