在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 -'))),
但我找不到只从选项下拉列表中获取值的方法,而不是选项名称。
答案 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为值。