2008/5/21 Alexandre Marinho <[EMAIL PROTECTED]>: > Bom esse problema é cabuloso. > Recentemente fui informado que o uso do getObject em consultas ao > catálogo podem causar baixo desempenho no portal. > Infelizmente possuo uma série templates para notícias com getObject. > Estou tentando remove-los mas estou com uma dificuldade séria. > Como estou fazendo hoje: > > results = context.portal_catalog(path='noticias',portal_type='News Item') > resultsComFoto = [i for i in results if i.getObject().getImage()] > resultsSemFoto = [i for i in results if not i.getObject().getImage()] > > Como podem ver necessito separar as noticias com foto das sem, só que > o script acima abusa do getObject, o que é muito ruim!!! > > A solução mais óbvia seria criar um novo índice no catalog certo? > > Bom eu fiz isso, adicionei um novo índice chamado getImage e também um > metadata getImage. Porém agora sempre que tento cadastrar uma nova > noticia com imagem acontece o erro: > > Can't pickle objects in acquisition wrappers. > > Se removo o índice e o metadata funciona normal. Já tentei fazer fazer > um rebild do catalog mas fica do mesmo jeito! > O que estou fazendo de errado??? > > DETALHE: quando adiciono um indice chamado getImageCaption (legenda da > imagem) o processo de cadastro permanece normal, ou seja, o erro > aparentemente acontece somente com o campo imagem. Porque seria isso? > Não é possível fazer dessa forma com atributos do tipo ImageField?? > Senão como poderia separar as noticias com imagem das sem imagem sem > utilizar o getObject?? > > Bom, acho que já fiz perguntas demais. Espero que possam me ajudar. > Obrigado
A mensagem de erro já dá a dica: não é possível serializar objetos que participam do sistema de aquisição (tradução não literal da mensagem). Note que o método getImage retorna uma imagem, um objeto complexo com suporte à aquisição, porém você está usando o resultado com se fosse um simples booleano nas suas list comprehensions. Então o que você precisa é armazenar no catalog o booleano, e não a imagem inteira. Um jeito super fácil de fazer isso via ZMI seria criar um script Python na skin do seu portal com este código: return bool(context.getImage()) Você poderia chamar este script de "tem_imagem" e criar um field index com o mesmo nome no seu catalog. [ ]s Luciano