2013-04-08 85 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

相關問題