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