SelectField 呈现 unicode 语法

SelectField renders unicode syntax

在 WTForms 中为 SelectField 动态创建选项时,我在下拉列表中呈现 (u'Choice',)。 我怀疑它与 unicode 有关,但不知道如何获得正确的字符串。

例如

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>

这与 Unicode 无关。

query() returns 每行的列值序列。对于其中只有一列的查询,您会得到一个长度为 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()]