Web2py SELECT选项值

时间:2016-06-30 16:43:38

标签: html forms web2py option

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

我有这个问题:

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

我有这个表格行:

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

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

2 个答案:

答案 0 :(得分:1)

我认为您不能在那里使用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

中检索选择值

答案 1 :(得分:0)

@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为值。