【问题标题】:Web2py SELECT option valueWeb2py SELECT 选项值
【发布时间】:2016-06-30 16:43:37
【问题描述】:

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

我有这个问题:

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 -'))),

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

【问题讨论】:

    标签: html forms web2py option


    【解决方案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

    检索选择值

    【讨论】:

    • 或者使用元组解包:[OPTION(label, _value=value) for value, label in course_list].
    • 非常感谢您回答dido,这太棒了。我没想到要查看 OPTION 助手。现在唯一的事情是我尝试访问 course[0] 和 course[1] 时出现(元组索引超出范围)错误,即使 course_id 应该是 [0] 并且 course_title 应该是 [1]
    • 首先是 Stuart,应用 Anthony 的建议并使用元组解包,显然更好,更易于阅读。
    • 你的查询在我看来没问题,不能说那个错误;也许尝试用更多代码更新您的问题。无论如何,我是 SQLFORM.factory 的忠实粉丝,我强烈建议也看看 Anthony 的回答。
    • @dido 我是 SQLFORM.factory 的转换者,它对其进行了排序。非常感谢您的帮助!
    【解决方案2】:

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

    【讨论】:

    • 整理好了,非常感谢,真的很感激。
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多