2009-10-11 115 views
0

我想知道的是使多选列表的唯一方法是在两个表之间建立桥接表?从multiselct列表中选择多个值

我有表(成员,语言,member_language) - >每个成员有一种或多种语言我做了一个多语言选择列表,我选择了多于languge它工作正常。

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

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

我该怎么做?

我的代码:

数据库部分

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

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

在此先感谢

回答

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 ... 

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

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

+0

不正是我想要的,我要的是生成CSV一份报告,但有一些准则,以根据他们的报告标准之一的报告区“例如:产生,会员具有区域扎马雷克或6October报告”所以我显示了列表区域,但是当我提交表单时它显示以下消息。 感谢 – Neveen 2009-10-11 14:08:48

+0

好了,上面的第一部分展示了如何显示与该地区的列表,形式选择您哪些感兴趣的东西。难道这不是你想干什么?至于消息,没有任何代码或信息很难说。 – RedGlyph 2009-10-11 14:30:44

+0

感谢您回复我的问题。我是web2py技术的初学者。所以错过了一些概念。 再次感谢。 – Neveen 2009-10-12 08:54:35