我尝试进行选择,并使用list:reference与表Kits和Estoque进行内部联接,但未返回任何内容,如果我删除了select的联接,但在视图中未显示具有一个产品的多个TR的TR套件,为套件的生产创建一个TR,有人可以帮助我吗?这是我的代码
db.py
db.define_table('TipoUnidade',
Field('TipoUnidadeDescricao'),
format='%(TipoUnidadeDescricao)s'
)
db.define_table('Produto',
Field('ID_TipoUnidade', 'reference TipoUnidade', requires=IS_IN_SET(['Unidade', 'Gramas'])),
Field('CodigoBarras', type='integer'),
Field('CodigoCacauShow', type='integer'),
Field('CustoUnitario', type='double'),
Field('QuantidadeMinima', type='double'),
Field('ProdutoDescricao', type='string', label='Produto'),
format='%(ProdutoDescricao)s'
)
db.define_table('EntradaProdutoEstoque',
Field('ID_Produto', 'reference Produto'),
Field('Validade', type='date'),
Field('Data', type='date'),
Field('Quantidade', type='double'),
Field('Lote'),
format='%(Lote)s' + ' - ' + '%(ID_Produto)s'
)
db.define_table('Estoque',
Field('ID_Produto', 'reference Produto'),
Field('Ativo', type='boolean', default=True),
Field('Validade', type='date'),
Field('Quantidade', type='double'),
Field('DataDesativacao',type='date'),
Field('Lote')
)
db.define_table('Kits',
Field('Nome'),
Field('ID_Estoque', 'list:reference Estoque'),
Field('QuantidadeProdutos', type='list:integer',label="Quantidade de Produtos"),
Field('QuantidadeKits', type='integer', label="Quantidade de Kits")
)
db.define_table('SaidaProdutoEstoque',
Field('ID_Estoque', 'reference Estoque'),
#Field('CustoTotal', type='double'),
Field('Data', type='date'),
Field('Quantidade', type='double'),
)
default.py
def kits():
Kits = db().select(db.Produto.ProdutoDescricao,db.Estoque.Lote, db.Kits.QuantidadeKits, db.Kits.Nome,
join=(db.Estoque.on(db.Kits.ID_Estoque == db.Estoque.id),
db.Produto.on(db.Estoque.ID_Produto == db.Produto.id)))
return dict(tabelaKits=Kits)
kits.html
{{for produto in tabelaKits:}}
<tr>
<td id="DescProd">{{=produto.Kits.Nome}}</td>
<td id="DescProd">{{=produto.Produto.ProdutoDescricao}} - {{=produto.Estoque.Lote}}</td>
<td id="DescProd">{{=produto.QuantidadeKits}}</td>
<th id="DescCamp"><button>VISUALIZAR</button></th>
</tr>
{{pass}}
答案 0 :(得分:0)
db.Estoque.on(db.Kits.ID_Estoque == db.Estoque.id)
以上,请记住,db.Kits.ID_Estoque
存储ID列表,而不是单个ID,因此您不能简单地将其与db.Estoque.id
等同。相反,如documentation中所述,您可以将.contains
方法与list:
类型的字段一起使用:
db.Estoque.on(db.Kits.ID_Estoque.contains(db.Estoque.id))
但是请注意,以上内容并不是有效的查询,因为它会转换为在字符串字段内进行的LIKE
搜索。如果遇到性能问题,则可以考虑使用联接表切换到更标准的多对多设计。