Obtener texto seleccionado de un formulario utilizando wtforms SelectField

Esta es una pregunta sobre el uso de wtforms SelectField .

Una vez enviado el formulario, deseo extraer el texto seleccionado.

Tengo el siguiente formulario:

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

Aquí está la vista:

 @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) 

Con test.hour=form.hour.name el name del atributo (sin sorpresa …), mientras que necesito el texto (digamos 8am si se elige la primera opción).

    ¿Cómo debería ser esto posible? Gracias por cualquier pista.

    Definir opciones globales en formas:

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

    importarlo desde formularios, convertirlo a dict:

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

    Fue respondido como un comentario, así que estoy escribiendo aquí.

    Use form.hour.data para obtener el valor en lugar del nombre.

    Si no necesitas los índices de elección, es mucho más sencillo:

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

    Otra opción es obtener el índice de form.hour.data y llamarlo así:

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

    Cuando configura sus opciones, la lista se ve como [(index, value),...] por lo que no necesita importarla, y probablemente no debería si se configura dinámicamente

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

    Sustituye el yo por la forma si está dentro de la clase.

    En general, a menudo las selecciones de manera que el índice y el valor son iguales Sin embargo, a veces quiero presentar una selección que es más corta que el valor de interés. En ese caso, lo pienso como [(value, display),...] y luego la variable de datos es el valor de interés. Por ejemplo, [(abspath, basename), ...]