Как найти конкретный объект по иерархии

Я пытаюсь получить определенный объект в иерархии, чтобы установить пользовательский индекс. Я обычно получаю объект, используя request.PARENTS

def getHierarchyObject(obj):
    cparents = obj.request.get('PARENTS')
    for cparent in cparents:
        if cparent.Type() == u'SpecificType':
            return cparent
    return false

Но это не работает для установки индекса, запрос родителей пуст. Я создал индекс по этой ссылке: http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/catalog

Мне нужно подняться на все уровни, используя aq_parent() найти объект?

1 ответ

Решение

PARENTS в запросе указана последовательность объектов, которые были пройдены, чтобы добраться до опубликованного объекта.

Вы не можете полагаться на это значение, если вам нужно проиндексировать ваши объекты, так как они не будут опубликованы.

Вместо этого используйте их цепочку приобретения:

from Acquisition import aq_inner, aq_chain

def getParentObject(obj, type):
    for parent in aq_chain(aq_inner(obj)):
        if parent.Type() == type:
            return parent
Другие вопросы по тегам