Pegar first_name da tabela auth_users por select() em tabelas sem chave estrangeira com auth_users?

20 views
Skip to first unread message

Leandro Paz

unread,
May 4, 2017, 1:13:12 PM5/4/17
to web2py-users-brazil
Na tabela dbatividade no campo assistente, gostaria que só fosse possível selecionar os usuários (da tabela auth_users) que estão descritos na dbassistente cujo evento seja digamos '7', tentei de varias formas mas o IS_IN_DB de dbatividade.assistente não enxerga o first_name da tabela auth_users, acaba retornando o código duas vezes no combobox. 

Como fazer um combobox assumir valores de:
db((db.auth_user.id == db.assistente.nome) and (db.assistente.evento=='7')).select()
exibindo id e first_name, mas armazenando apena o id?  

=======================================================================

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
)

#rows = db((db.auth_user.id == db.assistente.nome) and (db.assistente.evento=='7')).select()


dbassistente = db.define_table('assistente',
Field('nome','reference auth_user',label='Nome do Assistente do Evento',requires = IS_IN_DB(db,'auth_user.id','%(id)s - %(first_name)s')),
Field('evento','reference evento',label='',requires = IS_IN_DB(db,'evento.id','%(id)s - %(titulo)s')),
#Field.Virtual('nome_assistente',lambda row: row.nome.auth_user.first_name),
auth.signature
)



dbatividade = db.define_table('atividade',
Field('descricao',label='Descrição da Atividade do Evento',requires = IS_NOT_EMPTY()),
Field('evento','reference evento',label='Evento',requires = IS_IN_DB(db,'evento.id','%(id)s - %(titulo)s')),
Field('assistente','reference assistente',label='Nome do Assistente do Evento',requires = IS_IN_DB(db,'assistente.nome','%(id)s - %(nome)s')),
auth.signature
)

Carlos Costa

unread,
May 4, 2017, 3:24:37 PM5/4/17
to web2py-us...@googlegroups.com
Nesse caso você precisa passar um Set como primeiro argumento para o validador.
Field('assistente','reference assistente',label='Nome do Assistente do Evento',requires = IS_IN_DB(db((db.auth_user.id == db.assistente.nome) and (db.assistente.evento=='7')), 'assistente.id','%(id)s - %(nome)s')),

--
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,
May 4, 2017, 3:56:51 PM5/4/17
to web2py-users-brazil
Obrigado pela dica, mas acabei de fazer uma gambiarra que deu certo:

- Criei um campo virtual para conseguir o first_name

dbassistente.nome_assistente = Field.Virtual('nome_assistente', lambda row: db(db.auth_user.id==row.assistente.nome).select().first().first_name)

- E defini o validators  após o define_table:

dbatividade.assistente.requires=IS_IN_DB(db(db.auth_user.id == db.assistente.nome)(db.assistente.evento=='7'),'assistente.nome','%(nome)s - %(nome_assistente)s')

=======================================================
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@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 4, 2017, 4:39:52 PM5/4/17
to web2py-us...@googlegroups.com
Interessante a solução.

Outra possível é usar antes de gerar o form um IS_IN_SET, passando os valores obtidos com uma consulta.


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

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