Web2py, как мне сделать выбор с внутренним объединением в списке: ссылка - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь сделать выбор и выполнить внутреннее объединение со списком: ссылка на таблицу Kits и Estoque, но она ничего не возвращает, если я удаляю объединение thw select work, но в представлении не показывать один TR с более чем одним продуктом kit, создайте один 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}}

1 Ответ

0 голосов
/ 09 ноября 2018
db.Estoque.on(db.Kits.ID_Estoque == db.Estoque.id)

Примите во внимание, что db.Kits.ID_Estoque хранит список идентификаторов, а не один идентификатор, поэтому вы не можете просто приравнять его к db.Estoque.id.Вместо этого, как отмечено в документации , вы можете использовать метод .contains с полями list: -типа:

db.Estoque.on(db.Kits.ID_Estoque.contains(db.Estoque.id))

Обратите внимание, что вышеприведенное не является эффективнымзапрос, как он переводит на LIKE поиск внутри строкового поля.Если у вас возникнут проблемы с производительностью, вы можете подумать о переходе на более стандартный дизайн «многие ко многим» с таблицей соединений.

...