Web2py SELECT 选项值

Web2py SELECT option value

在 Web2Py 的控制器中,我试图用查询结果填充表单中的下拉列表。当用户提交表单时,我想提取 value 而不是选项名称。我似乎无法让选项值显示在下拉列表中。

我有这个问题:

course_list = external_db.executesql("SELECT course_id, course_title FROM course ORDER BY course_id")

我有这个 table 行:

form=FORM(TABLE(TR('course list: ' , SELECT(course_list, _name='courses', requires=IS_IN_SET(course_list, course_list_id, zero='- choose -'))),

但我找不到一种方法只从选项下拉列表中取回值,而不是从选项名称中取回值。

我认为您不能在那里使用 IS_IN_SET 来填充下拉列表。请改用 OPTION 助手并循环遍历从查询返回的每个元组以填充它们:

options = [OPTION(course[1], _value=course[0]) for course in course_list]
form=FORM(TABLE(TR('course list: ', SELECT(options, _name='courses'))))

提交时从 form.vars.courses

检索 select 值

@dido 有正确的想法。 course_list 是一个 (value, label) 元组的列表,所以你不能简单地将它直接传递给 SELECT 来获得你想要的结果。另一种选择是使用 SQLFORM.factory 构建表单,这通常比通过 FORM 助手手动构建自定义表单更容易:

form = SQLFORM.factory(Field('courses', 'integer',
                             requires=IS_IN_SET(course_list, zero='- choose -')))

以上将自动生成 SELECT,其中课程标题作为标签,课程 ID 作为值。