0

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

我有表格(成员、语言、成员语言)--> 每个成员都有一种或多种语言我制作了一个多选语言列表,并且我选择了它工作正常的多语言。

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

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

我怎样才能做到这一点??

我的代码:

数据库部分

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")

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

提前致谢

4

1 回答 1

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 的教程和常见问题解答来掌握该框架。

于 2009-10-11T13:49:37.713 回答