Valeu Dorneles, era algo desse tipo que estava precisando.
Fiz um pouco diferente... coloquei um metodo direto na classe
Temperatura que me retorna o valor!

Quanto ao getObject() já estou ciente disso, aprendi da pior forma
possível! Acho q a galera da lista deve sempre alertar para essas
"armadilhas" do plone, como você fez!

--
Alexandre Marinho
ITEC/AL

--- Em zope-pt@yahoogrupos.com.br, Dorneles Treméa <[EMAIL PROTECTED]> escreveu
>
> 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
>


Responder a