读取 Flask/WTF 中复选框的值属性
Reading the Value Attribute of a Checkbox in Flask/WTF
我有一个表单,其中有一列复选框对应于我的数据库中的列。我将每个复选框(在 javascript 中)的值设置为列的名称,但是当我尝试读取 Flask/Python 中的复选框值时,我只能得到 True
或False
。如何读取复选框的 value
属性的文本值?
为了使事情复杂化,我将表单生成为 FormFields 的 FieldList,因此我不能简单地对字段名称进行硬编码。 (好吧,我可以,但这会使模式更改变得脆弱。)
我的表单代码是
class ImportFilterSubForm(Form):
use = BooleanField(
'Use',
render_kw={'class': 'use'}
)
sel = SelectField(
'Maps to:',
choices=[],
render_kw={'class': 'sel'},
validators=[Optional()]
)
class ImportFilterForm(FlaskForm):
rows = FieldList(FormField(ImportFilterSubForm))
我的视图代码(删除了错误处理)是
def prefilter_import():
db_columns = Contact.__table__.columns.keys()
filename = request.cookies.get('workfile')
with open(filename) as fh:
reader = csv.DictReader(fh)
file_columns = reader.fieldnames
form = ImportFilterForm()
for col in db_columns:
new_row = form.rows.append_entry()
new_row.use.label = col
new_row.sel.choices = file_columns
input_file = request.cookies.get('input_file')
return render_template('filter_import.html', form=form, filename=input_file)
def postfilter_import():
form = ImportFilterForm()
db_columns = Contact.__table__.columns.keys()
filename = request.cookies.get('workfile')
with open(filename) as fh:
reader = csv.DictReader(fh)
file_columns = reader.fieldnames
missing_columns = db_columns
extra_columns = file_columns
mappings = dict()
for i, row in enumerate(form.rows):
if row.use.data: # Problem arises here
mappings[row.use.data] = row.sel.data
for key, value in mappings.items():
missing_columns.remove(key) # Problem manifests here
extra_columns.remove(value)
我正在尝试创建一个字典,将复选框的值映射到选择的值,但我只得到复选框的 True
和 False
,即使我'已验证复选框的 value
属性已正确 return 编辑为相应列的名称。
如何获取 Flask/WTForms 到 return value
属性的文本?
经过一番调查,我发现了字段对象的raw_data
属性,其中包含HTML控件的value
属性值的列表。因此,代码
mappings = dict()
for row in form.rows:
if row.use.data:
mappings[row.sel.data] = row.use.raw_data[0]
for key, value in mappings.items():
missing_columns.remove(value)
extra_columns.remove(key)
做我需要它做的事。
我有一个表单,其中有一列复选框对应于我的数据库中的列。我将每个复选框(在 javascript 中)的值设置为列的名称,但是当我尝试读取 Flask/Python 中的复选框值时,我只能得到 True
或False
。如何读取复选框的 value
属性的文本值?
为了使事情复杂化,我将表单生成为 FormFields 的 FieldList,因此我不能简单地对字段名称进行硬编码。 (好吧,我可以,但这会使模式更改变得脆弱。)
我的表单代码是
class ImportFilterSubForm(Form):
use = BooleanField(
'Use',
render_kw={'class': 'use'}
)
sel = SelectField(
'Maps to:',
choices=[],
render_kw={'class': 'sel'},
validators=[Optional()]
)
class ImportFilterForm(FlaskForm):
rows = FieldList(FormField(ImportFilterSubForm))
我的视图代码(删除了错误处理)是
def prefilter_import():
db_columns = Contact.__table__.columns.keys()
filename = request.cookies.get('workfile')
with open(filename) as fh:
reader = csv.DictReader(fh)
file_columns = reader.fieldnames
form = ImportFilterForm()
for col in db_columns:
new_row = form.rows.append_entry()
new_row.use.label = col
new_row.sel.choices = file_columns
input_file = request.cookies.get('input_file')
return render_template('filter_import.html', form=form, filename=input_file)
def postfilter_import():
form = ImportFilterForm()
db_columns = Contact.__table__.columns.keys()
filename = request.cookies.get('workfile')
with open(filename) as fh:
reader = csv.DictReader(fh)
file_columns = reader.fieldnames
missing_columns = db_columns
extra_columns = file_columns
mappings = dict()
for i, row in enumerate(form.rows):
if row.use.data: # Problem arises here
mappings[row.use.data] = row.sel.data
for key, value in mappings.items():
missing_columns.remove(key) # Problem manifests here
extra_columns.remove(value)
我正在尝试创建一个字典,将复选框的值映射到选择的值,但我只得到复选框的 True
和 False
,即使我'已验证复选框的 value
属性已正确 return 编辑为相应列的名称。
如何获取 Flask/WTForms 到 return value
属性的文本?
经过一番调查,我发现了字段对象的raw_data
属性,其中包含HTML控件的value
属性值的列表。因此,代码
mappings = dict()
for row in form.rows:
if row.use.data:
mappings[row.sel.data] = row.use.raw_data[0]
for key, value in mappings.items():
missing_columns.remove(value)
extra_columns.remove(key)
做我需要它做的事。