2015-05-08 3 views
0

При динамическом создании выбора для SelectField в WTForms я получаю (u'Choice ',) в раскрывающемся списке. Я подозреваю, что это что-то делать с unicode, но не знаю, как получить правильную строку.SelectField отображает синтаксис юникода

, например

form.group_id_name.choices = [(row, row) for row in db.session.query(entry.group_id_name).distinct()] 

В моих формах у меня есть

group_id_name = SelectField('group_id_name') 

Я хотел бы, чтобы сделать

<select id="group_id_name" name="group_id_name"><option value="Choice1">Choice1</option><option value="Choice2">Choice2</option></select> 

Вместо этого я получаю

<select id="group_id_name" name="group_id_name"><option value="(u'Choice1',)">(u'Choice1',)</option><option value="(u'Choice2',)">(u'Choice2',)</option></select> 

ответ

0

Это не имеет ничего общего с Unicode.

query() возвращает последовательность значений столбцов для каждой строки. Для запроса с одним столбцом в нем вы получаете длину-1-кортеж.

Когда вы неявно конвертируете кортеж в строку как часть шаблона, вы получаете представление кода кортежа Python, которое выглядит как (somevalue,).

Вы хотите включить строковое значение самого столбца в шаблоне, поэтому вы должны получить доступ к первому элементу последовательности, например:

form.group_id_name.choices = [(row[0], row[0]) for row in db.session.query(entry.group_id_name).distinct()] 

или используя распаковку назначение:

form.group_id_name.choices = [(name, name) for (name,) in db.session.query(entry.group_id_name).distinct()] 
+0

Спасибо, именно это. Я новичок в python, и все списки, кортежи, словари и их комбинации, немного запутывают. Чрезвычайно мощный, но сбивающий с толку. –

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