【问题标题】:Get selected text from a form using wtforms SelectField使用 wtforms SelectField 从表单中获取选定的文本
【发布时间】:2014-02-08 15:32:10
【问题描述】:

这是使用wtforms SelectField时的问题。

提交表单后,我希望提取选定的文本。

我有以下表格:

from wtforms import Form, SelectField
class TestForm(Form):
     hour = SelectField(u'Hour', choices=[('1', '8am'), ('2', '10am') ])

这是视图:

@app.route('/', methods=['GET', 'POST'])
def test_create():
form =TestForm(request.form)
if request.method == 'POST' and form.validate():
    test = Test()
    form.populate_obj(test)
    test.hour=form.hour.name
    db.session.add(test)
    db.session.commit()
    return redirect(url_for('test_create'))
return render_template('test/edit.html', form=form)

使用test.hour=form.hour.name 我获得属性name(不足为奇...),而我需要文本(如果选择第一个选项,假设8am)。

这怎么可能?感谢您的任何提示。

【问题讨论】:

    标签: python flask wtforms


    【解决方案1】:

    在表单中定义全局选项:

    HOUR_CHOICES = [('1', '8am'), ('2', '10am')]
    
    class TestForm(Form):
         hour = SelectField(u'Hour', choices=HOUR_CHOICES)
    

    从表单导入,转成dict:

    from .forms import HOUR_CHOICES
    
    hour_display = dict(HOUR_CHOICES).get(form.hour.data)
    

    【讨论】:

      【解决方案2】:

      它是作为评论回答的,所以我在这里写。

      使用form.hour.data 获取值而不是名称。

      【讨论】:

        【解决方案3】:

        如果你不需要选择索引,就简单多了:

        class TestForm(Form):
          hour = SelectField(u'Hour', choices=[('8am', '8am'), ('10am', '10am') ])
        

        【讨论】:

        • 是的,但那些选择索引几乎从不重要。索引隐含在列表中。
        【解决方案4】:

        当你设置你的选择时,列表看起来像[(index, value),...],所以你不需要导入它,如果动态设置可能不应该

        value = dict(form.hour.choices).get(form.hour.data)
        

        如果在表单类中,用 self 代替表单

        一般来说,我经常压缩选项以使索引和值相同。但是,有时我想展示一个比感兴趣的值更短的显示选择。在这种情况下,我将其视为[(value, display),...],然后数据变量 感兴趣的值。例如[(abspath, basename), ...]

        【讨论】:

          【解决方案5】:

          另一种选择是从 form.hour.data 中获取索引并像这样调用它:

          index = int(form.hour.data)
          form.hour.choices[index][1]
          

          【讨论】:

          • 更通用的解决方案是找到元素本身:[c for c in form.hour.choices if c[0] == form.hour.data][0],然后获取索引:c[1]
          猜你喜欢
          • 1970-01-01
          • 2017-05-16
          • 1970-01-01
          • 1970-01-01
          • 2018-04-05
          • 2017-08-21
          • 2019-10-12
          • 2016-09-10
          • 1970-01-01
          相关资源
          最近更新 更多