如何将列标题正确添加到WTForms动态选择字段列表中

时间:2019-05-17 17:48:34

标签: python python-3.x pandas flask-wtforms wtforms

我有一个Pandas数据框,并尝试将列标题返回到Flask应用程序上的WTForm动态列表中。 但是,当我尝试提交HTML表单时,出现验证错误。这是我的表单类错误。

   data = pd.read_excel("sampledata.xlsx")
   col_headers = list(data.columns)

   col_list = list(col_headers)
   dic_list = {i : col_list[i] for i in range(0, len(col_list))}


   class StatementForm(FlaskForm):
   date = SelectField('Date', choices = [(key, dic_list[key]) for key in dic_list])

我已经通过在选择列表中手动输入一个元组来测试HTML表单,并且该表单有效。显然,问题出在“日期”参数和选择项中。

最能帮助您修改代码的地方。

1 个答案:

答案 0 :(得分:0)

尝试使用以下内容来创建您的选择:

choices = [(str(x), y) for (x, y) in list(enumerate(data.columns))]

区别在于以上代码中的值是一个字符串。根据WFT表单文档:

  

选择字段保留一个choices属性,该属性是(值,标签)对的序列。从理论上讲,值部分可以是任何类型,但是由于表单数据是由浏览器以字符串形式发送的,因此您需要提供一个可以将字符串表示形式强制转换为可比较对象的函数。

在您的版本中,您尝试将整数作为值传递,这就是为什么它会中断的原因。