# Общая часть
from Products.PythonScripts.standard import html_quote
from Products.CMFCore.utils import getToolByName
request = container.REQUEST
RESPONSE = request.RESPONSE
urltool = getToolByName(context, "portal_url")
portal = urltool.getPortalObject()
catalogtool = getToolByName(context, "portal_catalog")
lcurses = [i.getObject() for i in catalogtool.searchResults(portal_type = 'Tema')]
refCatalog = getToolByName(portal, 'reference_catalog')
uid_catalog=getToolByName(portal, 'uid_catalog')
#Пример 1
for item in lcurses:
refs = refCatalog.getReferences(item, 'content_source')
print item.title_or_id()+'********************'
for i in refs:
print i.targetUID, i.sourceUID, i.relationship
print uid_catalog(UID=i.targetUID), uid_catalog(UID=i.sourceUID)
a=[k.getObject().getId() for k in uid_catalog(UID=i.targetUID)][0]
b=[k.getObject().getId() for k in uid_catalog(UID=i.sourceUID)][0]
print a, b
print "##############################"
#Пример 2
for i in refs:
print i.targetUID, i.sourceUID, i.relationship
print refCatalog.lookupObject(i.targetUID), refCatalog.lookupObject(i.sourceUID)
a=refCatalog.lookupObject(i.targetUID)
b=refCatalog.lookupObject(i.sourceUID)
print a.getId(), b.getId()
return printed
каталог 'reference_catalog' возвращает объекты со свойствами:
sourceUID -UID объекта -источника связи
targetUID -UID связанного объекта,
relation - имя связи
метод getReferences(sourceUID, relation, targetUID) позволяет получать поднаборы связей, настраивая параметры метода.
Поскольку возвращаться будут UID объектов, то для получения Id нужно использовать или каталог 'uid_catalog' (1 пример), или сам каталог 'reference_catalog'(2 пример). В примере приведен код для объектов типа Thema и LearnObject, связанных между собой связью 'content_source'.
Если у объекта есть поле типа
ReferenceField(
name='source',
widget=ReferenceBrowserWidget(
label='Source',
label_msgid='LearnCurse_label_source',
i18n_domain='LearnCurse',
),
allowed_types=('LearnObject','Document','File'),
multiValued=1,
relationship='content_source',
),
то список связанных этим отношением объектов можно получить как self.getИмя_поля. В данном примере self.getSource() - если в классе, или context.getSource() в классе вида и в виде.