我根据Plone.org instructions为我的内容类型添加了FieldIndex。
在ZMI中,我可以看到/mysite/portal_catalog/Indexes/Building
处的索引项目。我的内容类型(提供IMyType
,一个字段building
)是一个文件夹,包含IPhoto
中的allowed_content_types照片(提供building
,不含profiles/default/types/MyType.xml
字段)文件。
我只想为MyType的建筑字段编制索引。但是,似乎Photo类型的项目使用其父项的值进行索引。那很烦人。代码@indexer(IMyType)
是否意味着为IMyType及其包含的类型建立索引?我怎样才能仅为IMyType索引?
答案 0 :(得分:2)
索引器的作用是直接从被索引的对象获取属性。在作为特殊包装器的Plone中,如果它们存在,将使用已注册的索引器(使用@indexer
装饰器创建)。
但是,如果索引发生在索引building
上并且它也是IMyType
对象上的属性,那么任何包含的对象也将通过获取具有该属性。注册IMyType
的索引器并不能阻止这种情况。
有几种解决方法:
为索引器使用不同的名称,该名称与属性名称不匹配。请注意,如果您所做的只是索引属性索引器是多余的,索引也可以直接检索属性。
注册“全部捕获”索引器:
from zope.interface import Interface
@indexer(Interface)
def catchall_ignore(ob, **kw):
# Raising AttributeError means: do not index anything
raise AttributeError
现在将使用此索引器方法代替直接属性访问,而不是为building
注册索引器。
答案 1 :(得分:1)
这就是收购的方式。
此处如何解决此问题:
“使用执行aq_explicit检查的自定义索引器。”