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

Responder a