Utilizar informações do banco de dados como variaveis em outros objetos

43 views
Skip to first unread message

Érique Moreira

unread,
Sep 21, 2017, 10:00:11 PM9/21/17
to web2py-users-brazil
Boa Noite

Sou novo no Web2py, estou estudando pela documentação. Criei um pequeno programa, usando o ajudante FORM que cria receituários, eu digito o nome do paciente e escolho a(s) medicação(ôes), sai um receituário em pdf, onde posso salvar ou imprimir, cujo modelo já tinha feito em outro programa em python, usando o reportlab. Porém, gostaria de poder cadastrar esse paciente, com todos as informações necessárias, usando o banco de dados e utilizar esses dados, no caso, o nome, como variável, e incorporar na receita. Nesse caso passa como um argumento na função que cria a receita.
Seria necessário buscar o paciente e encaminhar para medicação, escolher a medicação e sair a receita pronta no nome daquele. Tentei com o SQLFORM e com o GRID e não estou conseguindo.

ATT
Érique Moreira

Paulo Andrade

unread,
Sep 21, 2017, 10:13:25 PM9/21/17
to web2py-us...@googlegroups.com
Boa noite Érique

Também sou novo no web2py e tentando apreender, porem não consigo começar a te ajudar se não detalhar mais o que já fez.
Como criou os modelos? Já esta conseguindo cadastrar os pacientes?

ate mais e bons estudos

Paulo Andrade

--
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.

Érique Moreira

unread,
Sep 22, 2017, 7:13:26 AM9/22/17
to web2py-users-brazil
Bom Dia

O programa inicial contém um menu, que direciona para as medicações (por tipo ou por doença), depois vc escolhe a medição e o formulário pede o nome do paciente. Sai então o receituário completo em PDF, com as medicações, data do dia, etc, isto já está feito.
Então fiz um modelo, onde cadastro os pacientes, depois de cadastrar, gostaria de poder buscá-los no BD e a partir daí medica-los.
Vou mandar um script resumindo para melhor compreensão. Obrigado desde já.

Relsi Hur Maron

unread,
Sep 22, 2017, 7:42:23 AM9/22/17
to web2py-users-brazil

Se o que tu precisa é buscar dados de um modelo para popular um form que, pelo que eu entendi, já está populado com dados de outro modelo, a forma mais simples de fazer isso é usar Ajax em um campo de texto que faz a busca pelo nome do paciente ao se digitar. Se tu precisa só do nome, isso, por si só, já basta, caso precise de outros dados, basta trazê-los juntos na consulta e popular os respectivos campos que tu vai utilizar para criar o teu relatório.

Lembrando que um form não precisa estar relacionado a um modelo de dados, e nem há a necessidade de usar o helper de formulário para criá-los, basta utilizar a marcação habitual em html e buscar o conteúdo em request.post_vars (ou request.vars).

Érique Moreira

unread,
Sep 22, 2017, 10:28:42 AM9/22/17
to web2py-users-brazil
db = DAL("sqlite://storage.sqlite")

db.define_table('paciente',
    Field('nome', 'string', label = "Nome :"),
    Field('idade', 'integer', label = 'Idade :'),
    Field('dt_nas', 'date', requires = IS_DATE(format = '%d/%m/%Y'), label='Data de Nascimento :'),
    Field('gender', requires=IS_IN_SET(['Masculino', 'Feminino', 'Outros']) ,label = "Gênero :"), 
    Field('profissao', 'string', label = "Profissão :"),           
    Field('endereco', 'string', label = 'Endereço :'),
    Field('bairro', 'string', label = 'Bairro :'),
    Field('cidade', 'string', label = 'Cidade/UF :'),
    Field('cpf', 'string', unique=True, requires = IS_MATCH('^\d{3}(\.\d{3})(\.\d{3})(\-\d{2})$',error_message='CPF Inválido. Ex.: 999.999.999-99'), label = 'CPF :'),
    Field('rg', 'string', label = 'R.G.: '),
    Field('mail', 'string', requires = IS_EMAIL(error_message='e-mail inválido'), label = 'E-mail : '),
    Field('tel', 'string', requires = IS_MATCH('^(\(\d{2})(\)\d{1})(\.\d{4})(\-\d{4})$',error_message='Celular inválido. Ex.: (99)9.9999-9999'), label = 'Telefone cel. :' ) ,
    Field('tel2', 'string', requires = IS_MATCH('^(\(\d{2})(\)\d{1})(\.\d{4})(\-\d{4})$',error_message='telefone inválido. Ex.: (99)9.9999-9999 ou (99)x.9999-9999'), label = 'Outro telefone :' ) ,           
    format = '%(nome)s')


CONTROLADORES

def parace():
    nomes = db.paciente(request.args(0, 1), fields = [db.paciente.nome])
    pac = str(nomes)
    criar_receitas.receita(pac, 1, 0, 0, parac, parac_pos, 0, 0, 0, 0, 0, 0, 0, dia, mes, ano)
    redirect(URL('result'))
    return dict(formulario=formulario)

def dipirona():
    formulario = SQLFORM.factory(Field('nome', label = 'Nome do paciente: '))
    if forma.process().accepted:
        pac = forma.vars.nome
        criar_receitas.receita(pac, 1, 0, 0, dipi, dipi_pos, 0, 0, 0, 0, 0, 0, 0, dia, mes, ano)
        redirect(URL('result'))
    return dict(formulario=formulario)


O exemplo da  função com dipirona foi a primeira que eu fiz, já tenho com todos as medicações. Eu jogo os argumentos no módulo criar_receita e ela sai pronta, usando a função result, que não coloquei aqui. Porém gostaria usar o cadastro, buscar o paciente  para depois fazer as medicações no nome deste. Vou estudar a idéia do Relsi, de como fazer.
Eu sou Cirurgião_Dentista, e apesar de ter alguma experiência em programação bem amadora, estou começando a usar a web mas estou gostando.


 

Relsi Hur Maron

unread,
Sep 22, 2017, 1:20:03 PM9/22/17
to web2py-users-brazil

Talvez se tu mudar a estrutura fique mais fácil de ver o processo.

Eu trabalharia com 3 modelos, um para os Pacientes (que tu já tem), um para os medicamentos, e um para o receituário, dessa forma, além de poder armazenar as receitas, e reaproveitá-las depois, fica melhor estruturado.

Érique Moreira

unread,
Sep 22, 2017, 3:04:32 PM9/22/17
to web2py-users-brazil


Justamente isso que estou tentando, criei dois novos modelos, um para medicação, contendo nome, apresentação e posologia e outro para medicar, no qual referencio os outros dois, escolho o paciente e medico. Bem, o meu problema (me desculpe se for bem básico), mas não consigo resolver, ao inviar os dados, não consigo recuperar o nome do paciente, nem a medicação para criar a receita em pdf. Conseguindo isto seria meio caminho andado, depois tem outra situação, desta forma eu escolho o paciente numa lista, mas fica inviável com 2.000 pacientes, dai eu deveria buscar o paciente por formulário e depois medicar. Mas vou tentando e estudando no tempo vago.

Relsi Hur Maron

unread,
Sep 22, 2017, 6:01:30 PM9/22/17
to web2py-users-brazil

Vamos lá


Em sexta-feira, 22 de setembro de 2017 16:04:32 UTC-3, Érique Moreira escreveu:


Justamente isso que estou tentando, criei dois novos modelos, um para medicação, contendo nome, apresentação e posologia e outro para medicar, no qual referencio os outros dois, escolho o paciente e medico. Bem, o meu problema (me desculpe se for bem básico), mas não consigo resolver, ao inviar os dados, não consigo recuperar o nome do paciente, nem a medicação para criar a receita em pdf.

Tu pode recuperar os dados do form dentro de request.post_vars ou request.vars dessa forma:

request.post_var.name_do_campo_no_form


Então, se o input que leva o nome do paciente tiver como name "paciente", tu recupera ele com:

request.post_vars.paciente

Isso vale para todos os campos

 
Conseguindo isto seria meio caminho andado, depois tem outra situação, desta forma eu escolho o paciente numa lista, mas fica inviável com 2.000 pacientes, dai eu deveria buscar o paciente por formulário e depois medicar. Mas vou tentando e estudando no tempo vago.


Aqui entra o ajax que eu te falei anteriormente, cria um campo que faça uma busca dinâmica e traga só os resultados que tu digitar.

Uma segunda opção seria utilizar o SQLFORM.grid [1], esse helper te trás uma funcionalidade completa de listagem e CRUD, nesse caso tu pode criar um botão customizado para gerar a receita.

Qualquer dúvida, pergunte.





 

Érique Moreira

unread,
Sep 25, 2017, 3:05:43 PM9/25/17
to web2py-users-brazil
Ainda não consegui, mas acho que estou chegando lá:

def teste():
    bt_medicar = [
        lambda row:A(T('Medicar'),_class="btn btn-success",_href=URL("parace",user_signature=True,args=[row.nome]))
    ]
   
    fields = [db.paciente.nome, db.paciente.idade]
   
    forma = SQLFORM.grid(db.paciente,
        links=bt_medicar,
        fields=fields,
        deletable=False,
        editable=False,
        create=False,
    )
    return dict (forma=forma)

def parace():
    #forma = SQLFORM.factory(Field('nome', label = 'Nome do paciente: '))
    #if forma.process().accepted:
    pac = str(request.args(0)) or redirect(URL('teste'))

    criar_receitas.receita(pac, 1, 0, 0, parac, parac_pos, 0, 0, 0, 0, 0, 0, 0, dia, mes, ano)
    redirect(URL('result'))
    return dict(forma=forma)

O único problema, nesse caso, é que no local dos espaços, foi completado com underline. Ainda tenho que melhorar, mas já é um começo.

Relsi Hur Maron

unread,
Sep 25, 2017, 8:09:52 PM9/25/17
to web2py-users-brazil

Se tu te refere ao nome dos campos, tu pode usar o parâmetro label do campo, no modelo que tu criou, para cada campo individualmente (da uma lida no capítulo sobre a DAL no livro) [1].

Se o que tu ainda não conseguiu é recuperar os dados do form, eu to te mandando em anexo um exemplo de recuperação de valores do post de um form, sem utilizar os helpers do web2py, da uma olhada nele.


[1] http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Field-constructor
web2py.app.teste_form.w2p

Érique Moreira

unread,
Sep 27, 2017, 1:50:02 PM9/27/17
to web2py-users-brazil
A principio deu certo, agora eu escolho a medicação e depois medico conforme o paciente cadastrado. Não sei se fiz da forma correta, ou da melhor forma. Agora vou tentar fazer ao contrário, selecionar o paciente do cadastro, para depois escolher a medicação. Obrigado pela ajuda.



web2py.app.medicar.w2p
Reply all
Reply to author
Forward
0 new messages