Opa Alexandre, > bom acho q meu problema seja muito simples, mas nao consegui encontrar > nada sobre isso. > > Tenho um tipo temperatura com field assim: > StringField( > name='tempo', > widget=SelectionWidget( > label="Tempo", > description="Condição climática do município", > label_msgid='Tempo_label_tempo', > description_msgid='Tempo_help_tempo', > i18n_domain='Tempo', > ), > required=1, > vocabulary=[('ceuclaro', 'Céu claro'),('chuvasisoladas', > 'Chuvas Isoladas'),('parcialmentenublado', 'Parcialmente > Nublado'),('nublado', 'Nublado'),('instavel', > 'Instável'),('chuvoso','Chuvoso'),('tempestade','Tempestade'),], > ), > > Como podem ver estou setando um valor no vocabulary dele... > ate ai tudo bem... > > mas quando tento acessar essa infomação so vem o valor da chave de > cada item e nao o valor real. ex.: > > temps = context.portal_catalog(portal_type="Temperatura") > return temps[0].getObject().tempo > > isso retorna 'ceuclaro' ao invés de 'Céu claro'... > > como faço para acessar o valor do dicionário e nao sua chave???
crie uma DisplayList com o conteúdo atual do vocabulary e use ela como o vocabulary do field: tempo_vocab = DisplayList([('ceuclaro', 'Céu Claro'), ...]) StringField( name='tempo', ... vocabulary=tempo_vocab, ... ) Então, no seu código, use algo como: temps = context.portal_catalog(portal_type="Temperatura") return tempo_vocab.getValue(temps[0].getObject().tempo) Duas observações: a) evite a todo o custo o uso de getObject() nos resultados de uma busca no catálogo, prefira sempre adicionar uma nova columa de metadados no catálogo. b) evite acessar diretamente os atributos do objeto que armazenam o valor dos fields (nem todo field armazena no objeto...), prefira sempre usar o accessor de cada field, getTempo no caso. HTH, -- Dorneles Treméa X3ng Web Technology http://nosleepforyou.blogspot.com