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