Virtual Field com select na mesma tabela

26 views
Skip to first unread message

Leandro Paz

unread,
Aug 24, 2017, 4:40:11 PM8/24/17
to web2py-users-brazil
Boa tarde pessoal, estou com um problema ao tentar definir campos virtuais.

O problema ocorre ao gerar campos calculados que necessitem de uma select na mesma tabela a qual o virtual Field foi inserido.

Existe uma forma alternativa?

Segue como fiz:

# no controler antes de definir o grid coloquei
db.atividade.mensagem = Field.Virtual('mensagem',lambda row: testando(row.atividade.id,id_insc,'') )

#no model definir a função
def testando(id_ativ,id_insc,recurso):
    linha_atividade=db(db.atividade.id==id_ativ).select()
    quantidade=len(linha_atividade)

    return quantidade

Aparece o erro:
<class 'gluon.contrib.pymysql.err.Error'> (<type 'exceptions.AssertionError'>, AssertionError('Protocol error, expecting EOF',))

Carlos Costa

unread,
Aug 24, 2017, 4:51:50 PM8/24/17
to web2py-us...@googlegroups.com
Não sei ao certo, mas talvez resolva se você não incluir todos os no select.
Aliás como você precisa só da quantidade não precisa nem usar o select, nem informar campos.

#no model definir a função
def testando(id_ativ,id_insc,recurso):
    return = db(db.atividade.id==id_ativ).count()


--
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
<º))><

Leandro Paz

unread,
Aug 24, 2017, 5:16:12 PM8/24/17
to web2py-users-brazil
Olá Carlos, coloquei um exemplo mais simples, mas no problema real tenho várias selects, tentei a ideia de não passar todos os campos nas selects, mas persiste o erro, por hora estou colocando os dados no links do SQLFORM.grid, só está estranho pois quando a mensagem é grande ele não faz a quebra de linha automaticamente.

Por hora vai ficar assim.

Obrigado.

Carlos Costa

unread,
Aug 24, 2017, 5:50:49 PM8/24/17
to web2py-us...@googlegroups.com
Pelo que entendi você espera que ele faça na coluna de link como faz na coluna de dados, que ele trunque os campos grandes.
Ele não só trunca como acrescenta reticências "...", para indicar que tem mais coisa.
Se for isso, você pode acresentar a função truncate_string no retorno.

truncate_string(text, length, dots='...')

return truncate_string(sua_string, 30)

o valor do comprimento máximo ou os "pontinhos" você define como convier, logicamente.

--
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,
Aug 24, 2017, 6:24:48 PM8/24/17
to web2py-users-brazil
Na verdade não era truncar, mas fixar uma largura para a coluna e ele quebra o texto automaticamente:

tipo assim:

 Exemplo de quebra de linha do
 meu texto.Exemplo de quebra 
 de linha do meu texto.

Leandro Paz

unread,
Aug 24, 2017, 6:56:12 PM8/24/17
to web2py-users-brazil
Deu certo, foi só um pouco de css.

Ficou assim:

    botoes=[   
    lambda row: DIV(botao_e_mensagem_inscricao_atividade(row.id,id_insc,'mensagem'),_style="color:red;max-width:300px; width: auto;white-space: pre-wrap;word-wrap: break-word;")
    ]

    
    grid = SQLFORM.grid(query=query, 
        fields=[dbatividade.id,dbatividade.descricao,dbatividade.carga_horaria_total,dbatividade.horarios],
        links=botoes,
        buttons_placement = 'left', 
        csv=False, user_signature=False, searchable=False, details=False,
        #deletable=ver_permissao('ad',None,None),
        deletable = False, create=False, editable=False, 
        maxtextlength=100,
        args=request.args[:1])

Carlos Costa

unread,
Aug 24, 2017, 7:14:34 PM8/24/17
to web2py-us...@googlegroups.com
Boa!

--
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.
Reply all
Reply to author
Forward
0 new messages