Galera estou com um problema de modelagem.
db.define_table(
'itens'
,'nome'
,'foto', 'upload'
)
db.define_table(
'acessorios'
,'nome'
,'foto', 'upload'
,'aplicacao', 'reference aplicacoes' # canto, mesa, sala etc... Referente a uma aplicação padrão
)
db.define_table(
'acessorios_itens'
,'acessorio_id', 'reference acessorios'
,'item_id', 'reference itens'
,'aplicacao', 'reference aplicacoes' # canto, mesa, sala etc... o usuário ainda poderá mudar a aplicação do acessório no item
,'grupo', # por exemplo: aplicação do acc no item é sala, ele ainda pode colocar sala1
)
db.define_table(
'vendas'
,'data','date'
,'....'
)
db.define_table(
'itens_venda'
,'item_id','reference itens'
,'venda_id','reference vendas'
,'grupos', 'list:string' # Adiciona aqui os grupos de acessórios que devem ser carregados
,'aplicacoes','list:string' # Adiciona os subgrupos
)
# Query para carregar isso
itens_venda = db.itens_vendas(request.args(0))
# Precisa carregar todos os acessorios que possuem aplicação cadastrada em itens_venda
# e depois filtrar pelos grupos definidos manualmente pelo usuário
# Exemplo:
#itens_venda.aplicacoes = ['calço','roleta','dobradiça']
#itens_venda.grupos = ['calco1','calco2']
query = (
(db.acessorios_item.venda_id==itens_venda.venda_id)
& (db.acessorios_item.aplicacoes.contains(itens_venda.aplicacoes))
& (db.acessorios_item.grupos.contains(itens_venda.grupos))
)
acessorios = db(query).select()
Explicando: Um item possui vários acessórios. Cada acessório de um item (acessórios_itens) possui uma aplicação diferente no item, logo eu posso repetir o acessório X n vezes no acessório W utilizando diferentes aplicações.
Nos itens da venda eu posso filtrar os acessórios que quero pela adicionando sua aplicação em aplicacoes (tabela itens_venda) e seus subgrupos em grupos (tabela itens_venda).
Pois veja eu tenho que carregar todos os grupos e carregar os subgrupos.