Python 如何将列标题正确添加到WTForms dynamic selectfield列表中

Python 如何将列标题正确添加到WTForms dynamic selectfield列表中,python,python-3.x,pandas,flask-wtforms,wtforms,Python,Python 3.x,Pandas,Flask Wtforms,Wtforms,我有一个dataframe,试图将列标题返回到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(

我有一个dataframe,试图将列标题返回到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表单,它成功了。显然,问题在于“日期”参数和选项


非常感谢您在查看代码时提供的帮助。

请尝试使用以下选项来创建您的选择:

choices = [(str(x), y) for (x, y) in list(enumerate(data.columns))]
区别在于上述代码中的值是字符串。根据WFT表格文件:

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


在您的版本中,您试图将整数作为值传递,这就是它被破坏的原因

请提供完整的回溯。请在选择中尝试
str(key)
。根据我的经验,SelectField不喜欢整数键。另外,您可以通过执行以下操作来摆脱一些步骤:
choices=[(str(x),y)for(x,y)In list(enumerate(data.columns))]
并在一行中完成所有操作。如果这是真的,请告诉我works@snakecharmerb控制台上没有什么可显示的,验证规则会阻止代码加载。这是@WoodyPride的屏幕截图,因为我的表单现在显示列标题值并提交。但是我注意到,每当调用数据时,输出的都是键或索引ID
form=StatementForm()
date=form.date.datadate返回索引号