I have difficulty to understand your models because they are not in english (sorry about that)... I will try to help anyway...
By the way you should put "," at the end of your lines like this : Field('CD_CIDADAO',type='**string',notnull=True,label='**Matrícula')*,* instead of : *,*Field('CD_CIDADAO',type='**string',notnull=True,label='**Matrícula') Because python will not understand, maybe web2py does, but it is not a good pratice... You use format =... But you don't use web2py fk fearture so format= can't manage your reprensentation... For example : representante table field : CD_CIDADAO field definition should be : Field('CD_CIDADAO',db.cidadao) So CD_CIDADAO will be of type integer and store the id of the cidadao table... That way web2py should generate a dropbox and use "format=" of cidadao table to avoid displaying the id of the field that has no meaning for end user... Then you will have to use represente= for CD_CIDADAO field to make sure that on retreiving of the result you not having the id instead of what you want the user to see... db.representante.CD_CIDADAO.represent=lambda id, row: db.cidadao(id).NM_CIDADAO Hope it helps Richard On Mon, Dec 19, 2011 at 10:10 AM, Jose Carlos Junior <josec...@gmail.com>wrote: > Please...I have some dificult in do this in web2py...as follow > > db.define_table("cidadao" > ,Field('CD_CIDADAO',type='id', > **label='Cidadão(PK)') > ,Field('CD_MATRICULA',type='**integer',notnull=True,label='** > Matrícula') > ,Field('NM_CIDADAO',type='**string',notnull=True,label='**Nome') > ,format = '%(NM_CIDADAO)s' > ,singular = 'cidadao' > ,plural = 'cidadaos' > ,migrate=False) > > > db.define_table("**representante" > ,Field('ID_REPRESENTANTE',**type='id',readable=False) > ,Field('ID_CARGOS',type='**integer',notnull=True,label='**Cargo') > ,Field('CD_CIDADAO',type='**string',notnull=True,label='**Matrícula') > ,Field('DT_INCLUSAO',type='**datetime',notnull=True,label='** > Inclusão') > ,Field('DT_EXCLUSAO',type='**datetime',notnull=False,label=** > 'Exclusão') > ,Field('CD_TELEFONE',type='**string',notnull=True,label='**Telefone') > ,Field('CD_EMAIL',type='**string',notnull=True,label='**Email') > ,Field('CD_CELULAR',type='**string',notnull=False,label='**Celular') > ,migrate=False) > > db.representante.CD_CIDADAO.**requires = IS_IN_DB(db, > 'cidadao.CD_CIDADAO', '%(CD_MATRICULA)s - %(NM_CIDADAO)s') > db.representante.ID_CARGOS.**requires = IS_IN_DB(db, 'cargos.ID_CARGOS', > '%(NOME)s') > > db.define_table("gtils_**representante" > ,Field('ID',type='id',**readable=False) > ,Field('ID_GTIL',readable=**True,label='GTIL') > ,Field('ID_REPRESENTANTE',**readable=True,label='**Representante') > ,Field('DT_INICIO',type='**datetime',notnull=True,label='**Início') > ,Field('DT_TERMINO',type='**datetime',notnull=False,label=**'Término') > ,migrate=False) > > db.gtils_representante.ID_**GTIL.requires = IS_IN_DB(db, 'gtils.ID_GTIL', > '%(NOME)s') > > How can i fill ID_REPRESENTANTE but show NM_CIDADAO (table cidadao) once > i don't have this field in "representante" table...?? or how can i put a > computed field in 'representant' table filled with the result choice of > the CD_CIDADAO. Thanks alot >