从多选列表中选择多个值

时间:2009-10-11 11:50:16

标签: web2py

我想知道的是,制作多选列表的唯一方法是在两个表之间有桥表吗?

我有桌子(会员,语言,会员语言) - >每个成员都有一种或多种语言我制作了一个多选长度列表,我选择了更多的语言,它可以正常工作。

但是我想在区域表中做同样的事情,但是这里的成员只有一个区域,所以当我从多选区域列表中选择多个区域时,它会导致错误“值不在数据库中!”,并且当我从区域列表中选择一个值时,它可以正常工作。

  

我想只有一个区域列表,我可以选择多个区域来生成满足所选区域的报告,我不会将任何选定的区域插入数据库,我只会将它们用于我的查询。 / p>

我该怎么做?

我的代码:

数据库部分

db.define_table("region_tmp", SQLField("name","string")) db.region_tmp.name.requires = IS_IN_DB(db,'region_tmp.name',multiple=True)

组成部分:

form=SQLFORM(SQLDB(None).define_table('myform',
       db.region_tmp.name,,submit_button="Generate Report")

当我从区域列表中选择多个区域时,我的代码输出是多选区域列表表单显示“值不在数据库中!”区域列表下的消息,当我从区域列表中选择一个区域时,它可以正常工作并生成报告。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望以多选形式显示所有区域,用于返回所选区域而不修改数据库?

您应首先从数据库中选择所有区域(我想您已经这样做了),然后将它们放在FORM中。例如,如果您的表格regions包含字段name

rows= db().select(db.regions.ALL)
components = [LI(INPUT(_name=i.name, _type="checkbox"), i.name) for i in rows]
return dict(form=FORM(INPUT(_type="submit"),
                      *components),
                      _method="post", _action="")

将返回可插入模板的表单。您可以使用除LI之外的其他内容,如P或BR,您还可以添加更好的格式(表格,...),但这只是想法。

这是第一部分。要提取所选信息,您可以在控制器功能中使用它:

def index():
    # Prepare the form
    rows = db().select(db.regions.ALL)
    components = [LI(INPUT(_name=i.name, _type="checkbox"), i.name) for i in rows]
    form=FORM(INPUT(_type="submit"),
              *components,
              _method="post", _action="")

    if request.post_vars.get("submit"):
        # Check the answer
        # ... more code ...
        redirect(URL(r=request, f="show", args=request.args))
    return dict(form=form)

def show():
    # ... more code ...

(你必须在if之后检查条件,我不是100%肯定)。 index()将在第一次显示表单时调用,第二次在用户单击“提交”按钮时调用。第二次,它应该进入条件,做你需要做的任何事情(检索区域值),并将输出重定向到另一个页面(这里是函数show())。

我只是给你一个整体的想法,但你应该真正解决教程和web2py的常见问题,以获得该框架的处理。