2012-06-28 4 views
1

Я добавляю FieldIndex для своего типа контента в соответствии с Plone.org instructions.Указать конкретный тип без его типов

В ZMI я могу видеть индексированные позиции на /mysite/portal_catalog/Indexes/Building. Мой тип контента (при условии, что IMyType с одним полем building) является папкой и содержит фотографию (предоставляющую IPhoto, без поля building) как allowed_content_types в файле profiles/default/types/MyType.xml.

Я хочу индексировать только для поля построения MyType. Тем не менее, кажется, что элементы типа Photo индексируются со значением от их родителей. Это раздражает. Имеет ли код @indexer(IMyType) индексирование для IMyType и его содержащих типов? Как я могу индексировать только IMyType?

ответ

2

Что делает индекс, так это получить атрибут непосредственно от проиндексируемого объекта. В Plone, который является как специальная оболочка, тот, который будет использовать зарегистрированные индексы (созданные с помощью декоратора @indexer), если они существуют.

Однако, если индекс индексируется с индексом building, и это также является атрибутом непосредственно на ваших объектах IMyType, любые содержащиеся объекты будут иметь этот атрибут и при приобретении. Регистрация индексатора для IMyType не мешает этому.

Есть несколько способов обойти это:

  1. Используйте другое имя для индексатор, тот, который не совпадает с именем атрибута. Обратите внимание: если все, что вы делаете, является индексом атрибута, то индексатор является избыточным, хотя индекс может точно также извлекать атрибут напрямую.

  2. Зарегистрировать «поймать всех» индексатор:

    from zope.interface import Interface 
    @indexer(Interface) 
    def catchall_ignore(ob, **kw): 
        # Raising AttributeError means: do not index anything 
        raise AttributeError 
    

    Вместо прямого доступа к атрибутам, теперь этот метод индексатор будет использоваться вместо этого для фотографий, в результате чего индексатор не регистрировать значение для building.

Смежные вопросы