选择所有真实的字段

时间:2013-04-08 02:06:54

标签: web2py

我有一个用户数据库和一个水果数据库,用户以一个勾选框的形式填写,以选择他们的水果。

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

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

这是我的数据库模型:

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)

1 个答案:

答案 0 :(得分: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的字段名称(这将自动跳过任何非布尔字段,因为只有布尔字段存储实际值{{ 1}}和True)。