[zope-pt] Re: Archetypes com vocabulary dinâmico
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
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
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