python - 选择字段 WTForm flask dropdown TypeError: 'NoneType' object is not iterable
问题描述
我已经编辑了这个问题,面临不同的问题
File "/home/amar/tts/FLASKAPP/voicetune/venv/lib/python3.7/site-packages/wtforms/fields/core.py", line 471, in pre_validate
for v, _ in self.choices:
TypeError: 'NoneType' object is not iterable
form.py 文件
language = SelectField(u'Language', coerce=str)
在 routes.py 文件中
def dashboard():
form = DashboardForm()
form.language.choices = [(lang.language_name,lang.language_label) for lang in Languages.query.all()]
return render_template('dashboard.html', title='Dashboard', form=form)
仪表板.html 文件
{{ form.language(class="form-control btn btn-info dropdown-toggle") }}
解决方案
这是我在之前的项目中使用表单选择多个字段的方法。
Class add(Form)
conceptList = SelectMultipleField('conceptList', coerce=int)
# Dynamic adding a concept
def __init__(self, *args, **kwargs):
Form.__init__(self, *args, **kwargs)
# Get the concepts from concepts table
self.conceptList.choices = [(c.concept_id, c.concept_name) for c in Concepts.query.order_by('concept_name')]
在视图文件中,我使用此方法从表单中检索数据。
for concept_id in form.conceptList.data:
concept = Concepts.query.get(concept_id)
new_tool.concepts_tools.append(concept)
它不在下拉菜单中,但您可能会发现它很有用。不同之处在于选择是在表单中声明的。我对此不确定,但我认为您需要将 selectField 从 string 更改为 int 并在选择中引用语言的 id。像这样的东西:
language = SelectField(u'Language', coerce=int)
def dashboard():
form = DashboardForm()
form.language.choices = [(lang.language_id,lang.language_name,lang.language_label) for lang in Languages.query.all()]
return render_template('dashboard.html', title='Dashboard', form=form)
推荐阅读
- android - 如何以编程方式关闭运行时权限对话框?
- c# - 使用 Postsharp 在运行时更改属性类变量
- java - Android Studio - 每次按下按钮时从头开始发出声音
- java - net.sf.jasperreports.engine.JRException:从 Jasper 报告中的文件加载对象时出错
- javascript - CSS 背景图像宽度 100% 高度自动
- json - 无法从其他文件调用数据
- unity3d - Unity Editor 非常频繁地冻结
- javascript - JS - 异步函数的解析错误
- java - Flyway在添加`module-info.java`后测试时无法访问资源
- aspnetboilerplate - 有关 ASP.NET 样板的一般信息