Get selected text from a form using wtforms SelectField

为君一笑 提交于 2019-11-29 10:48:40

Define choices global in forms:

HOUR_CHOICES = [('1', '8am'), ('2', '10am')]

class TestForm(Form):
     hour = SelectField(u'Hour', choices=HOUR_CHOICES)

import it from forms, convert it to dict:

from .forms import HOUR_CHOICES

hour_display = dict(HOUR_CHOICES).get(form.hour.data)

It was answered as a comment, so I'm writing here.

Use form.hour.data to get the value instead of the name.

If you don't need the choice indexes, is much more simpler:

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

Another option is to get the index from form.hour.data and call it like this:

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

When you set your choices, the list looks like [(index, value),...] so you don't need to import it, and probably shouldn't if setting dynamically

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

Substitute self for form if inside form class

In general, I often zip the choices so index and value are the same. However, sometimes I want to present a displayed selection that's shorter than the value of interest. In that case, I think of it like [(value, display),...] and then the data variable is the value of interest. For example, [(abspath, basename), ...]

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!