WTForms Selectfield - 如何只获取特定列的值?
WTForms Selectfield - How to fetch only the values of a particular column?
首先,我最近才开始使用 Flask,所以我现在完全是个新手,但我喜欢它,希望以后能在这个过程中提高我的技能。但是,我可能缺少一些非常基本的东西,例如:我创建了包含 select 字段的表单:
class AddProductForm(Form):
subcategory = SelectField('')
然后我从查询中获取结果并将它们应用于 SelectField 的选择。
...
cur = conn.cursor()
cur.execute("SELECT name FROM subcategory")
subcategories = cur.fetchall()
cur.close()
form = AddProductForm(CombinedMultiDict((request.files, request.form)))
form.subcategory.choices = [(subcat, subcat) for subcat in subcategories]
...
到目前为止一切正常,我在 SelectField 中获得了所有结果,但我也将它们与列名称一起返回,所以基本上 select 字段的每个选项的值看起来格式如下(其中 'name' 是数据库中列的名称:
{'name': 'Gears and bolts'}
我的问题 - 是否可以只显示值(在本例中为 "Gears and bolts")作为 select 字段的选项文本,而不是整个前一行?
谢谢。
我想通了,基于这个答案 ,我会把答案放在这里以防万一有人需要它。基本上,我改变了这一行:
form.subcategory.choices = [(subcat, subcat) for subcat in subcategories]
以下内容:
form.subcategory.choices = [(subcat, subcat['name']) for subcat in subcategories]
该死的...那是一些基本的东西,伙计。以前,我试图使用 subcat.name
而不是 subcat['name']
,这显然是访问值的错误方式,我得到的是 AttributeError: 'dict' object has no attribute 'name'
首先,我最近才开始使用 Flask,所以我现在完全是个新手,但我喜欢它,希望以后能在这个过程中提高我的技能。但是,我可能缺少一些非常基本的东西,例如:我创建了包含 select 字段的表单:
class AddProductForm(Form):
subcategory = SelectField('')
然后我从查询中获取结果并将它们应用于 SelectField 的选择。
...
cur = conn.cursor()
cur.execute("SELECT name FROM subcategory")
subcategories = cur.fetchall()
cur.close()
form = AddProductForm(CombinedMultiDict((request.files, request.form)))
form.subcategory.choices = [(subcat, subcat) for subcat in subcategories]
...
到目前为止一切正常,我在 SelectField 中获得了所有结果,但我也将它们与列名称一起返回,所以基本上 select 字段的每个选项的值看起来格式如下(其中 'name' 是数据库中列的名称:
{'name': 'Gears and bolts'}
我的问题 - 是否可以只显示值(在本例中为 "Gears and bolts")作为 select 字段的选项文本,而不是整个前一行?
谢谢。
我想通了,基于这个答案
form.subcategory.choices = [(subcat, subcat) for subcat in subcategories]
以下内容:
form.subcategory.choices = [(subcat, subcat['name']) for subcat in subcategories]
该死的...那是一些基本的东西,伙计。以前,我试图使用 subcat.name
而不是 subcat['name']
,这显然是访问值的错误方式,我得到的是 AttributeError: 'dict' object has no attribute 'name'