2014-01-19 2 views
1

Это вопрос об использовании wtforms SelectField.Получить выделенный текст из формы с помощью 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, если выбрана первая опция).

Как это возможно? Спасибо за любой намек.

ответ

4

Определить выбор глобальных форм:

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

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

импорта его из формы, преобразовать его в Сыроватский:

from .forms import HOUR_CHOICES 

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

Он ответил как комментарий, поэтому я пишу здесь.

Используйте form.hour.data, чтобы получить значение вместо имени.

+0

Это даст индексы, но не текст ... – mannaia

2

Если вам не нужны индексы выбора, гораздо проще:

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

Да благодарит ее работает, хотя я теряю показатели выбора .... – mannaia

+0

Да, но эти индексы выбора почти никогда не важны. Индексы неявны в списке. –

0

Когда вы устанавливаете свой выбор, список выглядит [(index, value),...] так что вам не нужно импортировать его, и, вероятно, не должен «т, если установка динамически

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

замещающей себя для формы, если внутри класса формы

В общем, я часто заархивировать выборы так, индекс и значение одинаковы. Однако иногда я хочу представить отображаемый отбор, который короче значения интереса. В этом случае я думаю об этом как [(value, display),...], а затем переменная данных равна ценность интереса. Например, [(abspath, basename), ...]

0

Другой вариант, чтобы получить индекс от form.hour.data и назовем его так:

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

 Смежные вопросы

  • Нет связанных вопросов^_^