2013-04-08 62 views
1

我有一个用户数据库和一个水果数据库,用户填写一个勾选框来选择他们拥有的水果。选择所有的字段为真

在配置文件中,我想反映这些信息,但我无法弄清楚我将如何查询web2py中的数据库以显示所有设置为True的布尔字段。

可以用SQL查询完成,还是需要筛选选择用户水果记录的结果?

这里是我的DB模式:

db.define_table('fruit', 
    Field('id', 'reference auth_user'), 
    Field('apple','boolean',label=T('Apple')), 
    Field('apricot','boolean',label=T('Apricot')), 
    Field('cherry','boolean',label=T('Cherry')), 
    Field('fig','boolean', label=T('Fig')), 
    Field('lychee','boolean', label=T('Lychee')), 
    Field('peach','boolean', label=T('Peach')), 
    Field('pear','boolean', label=T('Pear')), 
    Field('plum','boolean', label=T('Plum'))) 

这里是我的控制器(这显然行不通它只是返回<Set 0>)。

我试图从谷歌搜索几个不同的组合,但没有具有期望的结果:

def profile(): 

    id = auth.user.id or redirect(URL('default', 'index')) 
    user = db.auth_user[id] 
    fruit = db.fruit(id=id) 
    produce = db(fruit == True) 
    return dict(user=user, produce=produce) 

回答

2
fruit = db.fruit(id=id) 

以上,fruit是DAL Row对象(其行为很像一个字典)。

produce = db(fruit == True) 

以上,db(fruit == True)是你将如何指定DAL设置,并且fruit == True部分将是一个DAL查询,但它没有意义在查询中使用Row对象。在任何情况下,您都不需要Set对象,因为这样的对象不包含任何数据 - 它们只是定义一组记录(不检索它们)。

目前尚不清楚你在找什么类型的数据结构的,但如果你想已签水果名称的列表,你可以尝试:

produce = [field for field in fruit if fruit[field] is True] 

上面所列内容理解遍历领域并且保留那些与该字段相关联的值为True(这将自动跳过任何非布尔字段,因为只有布尔字段存储实际值TrueFalse)。

+0

谢谢你的解释。 这个完美的作品 – 4BY 2013-04-08 16:15:21

相关问题