Как найти конкретный объект по иерархии
Я пытаюсь получить определенный объект в иерархии, чтобы установить пользовательский индекс. Я обычно получаю объект, используя 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