【问题标题】:Select field WTForm flask dropdown TypeError: 'NoneType' object is not iterable选择字段 WTForm flask dropdown TypeError: 'NoneType' object is not iterable
【发布时间】:2019-09-19 09:52:53
【问题描述】:

我已经编辑了这个问题,面临不同的问题

  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)

dashboard.html 文件

    {{ form.language(class="form-control btn btn-info dropdown-toggle") }}

【问题讨论】:

  • 您确定需要coerce=str吗?这可能是问题所在,因为它会将您的选择值转换为 str,而它可能必须是 int,因为它是 id。
  • 请提供更多代码:如何创建和验证表单。
  • 我已经编辑了这个问题,因为我之前添加了不同的代码
  • 看起来您在语言字段上的选择是None 请提供您正在创建表单实例的代码(可能是 routes.py)。
  • @stasiekz 请检查我添加了 routes.py 代码

标签: python flask flask-sqlalchemy flask-wtforms


【解决方案1】:

这是我在之前的项目中使用的一种使用表单选择多个字段的方法。

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) 

【讨论】:

  • 我指的是这个文档。 wtforms.readthedocs.io/en/latest/…
  • 根据您发布的文档编辑了我的初步评论。你可以看看。
  • 我已经删除了我的 if form.validate_on_submit() 条件,暂时解决这个问题......问题仍然存在
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2020-06-17
  • 2017-10-14
相关资源
最近更新 更多