inserir botão de pesquisa

55 views
Skip to first unread message

Leandro Paz

unread,
May 17, 2017, 4:15:50 PM5/17/17
to web2py-users-brazil
Pessoal, estou com duas tabelas uma chamada de cliente que possui Id, Nome entre outros campos pessoais, e uma segunda tabela de pedidos a qual possui uma chave estrangeira para o Id do cliente. Para fazer aparecer o nome de todos os clientes na tabela pedido, para selecionar um através do combobox foi tranquilo. O problema é que quando a aplicação estiver em produção tenho o receio de que a quantidade de clientes fique enorme o que dificultaria muito a busca dentro de um combobox. 

Penso que o melhor seja inserir um botão de busca ao lado o campo nome do cliente(nas telas de edição de de inserção), e pesquisar por meio de uma select a qual mostre os nome que contenham o texto digitado, entretanto como posso fazer isso? Pensei em chamar uma nova página de busca mas irei perder os dados já digitado!   

Ou alguém tem alguma outra ideia que resolva este problema de busca em um combobox?

Esclareço que estou desenvolvendo minha primeira aplicação em web2py e também é meu primeiro contato com python. 

Carlos Costa

unread,
May 17, 2017, 4:54:15 PM5/17/17
to web2py-us...@googlegroups.com
Vou implementar essa solução em breve no meu sistema. Depois posso compartilhar.

Mas por enquanto uma solução diferente e mais rápida é o usar o widget de auto completar.
Dá uma olha aqui, só um linha de código já resolve.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><
Message has been deleted

Leandro Paz

unread,
May 17, 2017, 5:59:25 PM5/17/17
to web2py-users-brazil
Obrigado Carlos funcionou, só ficou um pouco estranho na view, a caixa ficou sobrepondo parte da caixa onde devo digitar o texto.

Segue código:

dbevento = db.define_table('evento',
Field('titulo',label='Título do Evento',requires = IS_NOT_EMPTY()),
Field('data_inicio','date',label='Data do Início',requires = IS_DATE()),
Field('data_fim','date',label='Data do Fim',requires = IS_DATE()),
Field('data_inicio_inscricao','date',label='Data do Início das Inscrições',requires = IS_DATE()),
Field('data_fim_inscricao','date',label='Data do Fim das Inscrições',requires = IS_DATE()),
Field('carga_horaria','integer',label='Carga Horária'),
Field('arquivo_template','upload',label='Template para a Submissão de Trabalhos'),
Field('numero_avaliadores','integer',label='Número de Avaliadores'),
Field('regras_submissao','upload',label='Regras de Submissão de Trabalhos'),
Field('max_submissao_por_autor','integer',label='Número Máximo de Submissões por Autor'),
Field('percentual_frequencia','integer',label='Percentual Mínimo de Frequência'),
Field('coordenador','reference auth_user',label='Coordenador do Evento',requires = IS_IN_DB(db,'auth_user.id','%(id)s - %(first_name)s')),
auth.signature
)
# usar autocomplete para busca por nome
db.evento.coordenador.widget = SQLFORM.widgets.autocomplete(
     request, db.auth_user.first_name, id_field=db.auth_user.id, limitby=(0,10), min_length=0, orderby=db.auth_user.first_name)

Message has been deleted

Leandro Paz

unread,
May 17, 2017, 6:03:33 PM5/17/17
to web2py-users-brazil
Será que o autocomplete pode ser configurado para pesquisar por toda a string? Ou ele só busca pelos nome que começam com o texto digitado?

Carlos Costa

unread,
May 18, 2017, 7:47:20 AM5/18/17
to web2py-us...@googlegroups.com
No meu eu tive que ajustar o estilo para ele ficar com estilo do bootstrap.
Parece estar desatualizado, então tem que forçar o estilo.
Você pode fazer isso depois que constrói o form.

form.element('#caixa_campo')['_class'] += ' form-control'

Em 17 de maio de 2017 19:03, Leandro Paz <leandro....@gmail.com> escreveu:
Será que o autocomplete pode ser configurado para pesquisar por toda a string? Ou ele só busca pelos nome que começam com o texto digitado?

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Carlos Costa

unread,
May 18, 2017, 7:58:06 AM5/18/17
to web2py-us...@googlegroups.com
E para procurar em qualquer parte da string passe o argumento at_beginning=False

Em 18 de maio de 2017 08:46, Carlos Costa <yamand...@gmail.com> escreveu:
No meu eu tive que ajustar o estilo para ele ficar com estilo do bootstrap.
Parece estar desatualizado, então tem que forçar o estilo.
Você pode fazer isso depois que constrói o form.

form.element('#caixa_campo')['_class'] += ' form-control'
Em 17 de maio de 2017 19:03, Leandro Paz <leandro....@gmail.com> escreveu:
Será que o autocomplete pode ser configurado para pesquisar por toda a string? Ou ele só busca pelos nome que começam com o texto digitado?

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsubscribe...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsubscribe...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><

Leandro Paz

unread,
May 18, 2017, 9:29:10 AM5/18/17
to web2py-users-brazil
Muito obrigado, ficou ótimo.

{{extend 'layout.html'}}
{{form.element('#evento_coordenador')['_class'] += ' form-control'}}
{{=form}}

Leandro Paz

unread,
May 18, 2017, 11:36:55 AM5/18/17
to web2py-users-brazil
{{extend 'layout.html'}}
{{try:}}
   {{form.element('#evento_coordenador')['_class'] += ' form-control'}}
{{except:}}
{{pass}}

{{=form}}

Ari Sobel

unread,
May 18, 2017, 12:50:22 PM5/18/17
to web2py googlegroups
Legal...!

Poderia passar o signature do widget completo com "at_beginning=False"?

Thanks


Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Ari Sobel

unread,
May 18, 2017, 4:16:41 PM5/18/17
to web2py googlegroups
classgluon.sqlhtml.AutocompleteWidget(requestfieldid_field=Nonedb=Noneorderby=Nonelimitby=(010)distinct=Falsekeyword='_autocomplete_%(tablename)s_%(fieldname)s'min_length=2help_fields=Nonehelp_string=Noneat_beginning=True)classgluon.sqlhtml.AutocompleteWidget(requestfieldid_field=Nonedb=Noneorderby=Nonelimitby=(010)distinct=Falsekeyword='_autocomplete_%(tablename)s_%(fieldname)s'min_length=2help_fields=Nonehelp_string=Noneat_beginning=True)

Mas nao ta funcionando pra mim. Dá erro

Ari Sobel

unread,
May 18, 2017, 4:54:02 PM5/18/17
to web2py googlegroups
Desculpe, problema de versão. eu estava usando a 2.9.9 - Na 2.14.6 ok

Leandro Paz

unread,
May 19, 2017, 12:44:47 PM5/19/17
to web2py-users-brazil
Pessoal será que no código abaixo tem como adaptar para aparece o nome e o id? 

db.evento.coordenador.widget = SQLFORM.widgets.autocomplete(
     request, db.auth_user.first_name, id_field=db.auth_user.id, limitby=(0,10), min_length=0, orderby=db.auth_user.first_name, at_beginning=False)

Tentei indicar no autocomplete um campo para campo virtual (com nome e id juntos) criado na tabela auth_user, mas não deu certo!
Tem como usar o autocomplete em campos virtuais?
Tem como inserir campo virtual na tabela auth_user?


Carlos Costa

unread,
May 19, 2017, 5:58:33 PM5/19/17
to web2py-us...@googlegroups.com
1
Acrescente mais campos usando o argumento help_fields=[...]
Passe os campos que deseja mostrar
E acrescente também o campo id_field passando o campo id da tabela.

2
Campo virtual tem que funcionar.

3
Tem. É só referenciar depois de criada.
>>> db.item.total_price =         Field.Virtual('total_price',
                      lambda row: row.item.unit_price * row.item.quantity)

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Leandro Paz

unread,
May 20, 2017, 9:49:21 AM5/20/17
to web2py-users-brazil
Carlos mais uma vez obrigado, funcionou segue código:

db.evento.coordenador.widget = SQLFORM.widgets.autocomplete(
     request, db.auth_user.first_name, id_field=db.auth_user.id, limitby=(0,10), min_length=0, orderby=db.auth_user.first_name, 
     at_beginning=False, help_fields=[db.auth_user.first_name,db.auth_user.id,db.auth_user.cpf], 
     help_string= '%(first_name)s - Id: %(id)s - CPF: %(cpf)s')
Reply all
Reply to author
Forward
0 new messages