[zope-pt] Re: Archetypes com vocabulary dinâmico

2008-06-30 Por tôpico Alexandre Marinho
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





[zope-pt] Re: Archetypes com vocabulary dinâmico

2008-06-29 Por tôpico Dorneles Treméa
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



[zope-pt] Re: Archetypes com vocabulary dinâmico

2008-06-26 Por tôpico Alexandre Marinho
Bom, já tinha feito isso.

achei que havia uma forma mais simples de obter essa informação
desse jeito me parece um anto quanto uma gambiara.

tanto eh que ao salvar objetos do tipo temperatura o base_view exibe o
valor formatado e não a chave.
--- Em zope-pt@yahoogrupos.com.br, Leonardo Miranda
[EMAIL PROTECTED] escreveu

 Opa Alexandre,
 
 Da uma estudada em python cara, isso é coisa basica do python.
 
 se vc fizer um pequeno teste no seu console usando o python, olha so...
 
 Você tem um lista
 X=[('ceuclaro', 'Céu claro'),('chuvasisoladas','Chuvas Isoladas'),]
 
 vc pode da um loop na lista
 for item in X:
 print X
 
 ele ira retornar a chave com o indice 0 e 1..
 
 se vc somente quer o indice 1, que no caso é a descrição e o indice
0 e o
 id... entao vc teria que informar
 for item in X:
 print X[1]
 
 Abraços,
 
 Leonardo Miranda
 
 
 
 
 2008/6/25 Alexandre Marinho [EMAIL PROTECTED]:
 
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???
 
   
 
 
 
 
 -- 
 Leonardo Miranda