Formulario de Busca Personalizado

61 views
Skip to first unread message

Luís Felipe Almeida

unread,
Sep 21, 2015, 1:20:11 PM9/21/15
to web2py-users-brazil
Fala pessoal, sou novato em web2py e tive um pouco de dificuldade para implementar um formulário de busca personalizado, após pesquisar um pouco cheguei ao seguinte resultado abaixo, é bem simples mas talvez possa ajudar alguém.

Crie duas tabelas bem simples só para exemplo
db:

Cidade = db.define_table('cidade',
               Field('id','id'),
               Field('nome','string'),
               Field('descricao','string')
               )

Pessoa = db.define_table('pessoa',
               Field('id','id'),
               Field('nome','string'),
               Field('idade','string'),#coloquei string para agilizar, pois se não teria que tratar
               Field('sexo','string'),
               Field('id_cidade','reference cidade')
               )

Pessoa.id_cidade.requires=IS_IN_DB(db,Cidade.id , '%(nome)s')
Pessoa.sexo.requires=IS_IN_SET(['masculino','feminino'])

controllers:

def busca():
   
    pessoas = ''
   
    form = SQLFORM.factory(
       
        Field('idade',    
             label='Idade',
             ),
        Field('sexo',
             label='Sexo',
             requires = IS_EMPTY_OR(IS_IN_SET(['masculino','feminino']))
             ),
        Field('cidade',
             label='Cidade',
             requires = IS_EMPTY_OR(IS_IN_DB(db, Cidade.id , '%(nome)s'))
             ),_method='POST',_action=URL('busca')
    )

    if form.accepts(request.vars):
        idade = request.vars.idade
        sexo = request.vars.sexo
        cidade = request.vars.cidade

        query = []

        if idade != "":
            query.append(Pessoa.idade >= idade)
        pass

        if sexo != "":
            query.append(Pessoa.sexo == sexo)
        pass

        if cidade != "":
            query.append(Pessoa.id_cidade == cidade)
        pass

        variaveis = [idade,sexo,cidade]
        resultado = filter(lambda x: len(x) > 0, variaveis)

        if len(resultado) == 0:
            query.append(Pessoa.id)
        pass

        query = reduce(lambda a,b: (a&b),query)

        pessoas  = db(query).select(Pessoa.ALL,
                                    left=[
                                         Pessoa.on((Pessoa.id_cidade == Cidade.id)),
                                        ]
                                   )


    return dict(form = form, pessoas = pessoas)



Rodrigo attique santana

unread,
Sep 29, 2017, 4:12:43 PM9/29/17
to web2py-users-brazil
Cara, parabéns muito bom.
Porém você não precisa usar o pass para fechar o if quando estiver digitando código python, somente nas views. E o define_table cria o id automaticamente para as tabelas.
Reply all
Reply to author
Forward
0 new messages