1

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

在配置文件中,我想反映此信息,但我不知道如何在 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)
4

1 回答 1

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

于 2013-04-08T05:50:23.050 回答