2013-04-08 4 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 Set, а fruit == True часть будет DAL запросов, но это не имеет смысла использовать объект Row в запросе. В любом случае вам не нужен объект Set, поскольку такие объекты не содержат никаких данных - они просто определяют набор записей (без их извлечения).

Это не ясно, какой тип структуры данных вы ищете, но если вы хотите получить список фруктов имена, которые были проверены, вы можете попробовать:

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

, приведенный выше список понимания итерацию через поле имена и сохраняются те, для которых значение, связанное с полем, равно True (это автоматически пропустит любые небулевые поля, так как только логические поля сохраняют фактические значения True и False).

+0

Благодарим вас за разъяснение. Это прекрасно работает – 4BY

Смежные вопросы