本文整理匯總了Python中Products.Archetypes.interfaces.referenceable.IReferenceable.getBackReferenceImpl方法的典型用法代碼示例。如果您正苦於以下問題:Python IReferenceable.getBackReferenceImpl方法的具體用法?Python IReferenceable.getBackReferenceImpl怎麽用?Python IReferenceable.getBackReferenceImpl使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Products.Archetypes.interfaces.referenceable.IReferenceable
的用法示例。
在下文中一共展示了IReferenceable.getBackReferenceImpl方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: getData
# 需要導入模塊: from Products.Archetypes.interfaces.referenceable import IReferenceable [as 別名]
# 或者: from Products.Archetypes.interfaces.referenceable.IReferenceable import getBackReferenceImpl [as 別名]
def getData(self):
""" Returns backreferences:
{
'uid-obj-a': {
'the-field': [
'uid-of-another-unpublished-object',
'my-uid',
'uid-obj-b',
],
},
'uid-obj-b': {
'ref-field': 'my-uid',
},
}
"""
data = {}
if hasattr(aq_base(self.context), 'getBackReferenceImpl'):
referenceable = self.context
else:
try:
referenceable = IReferenceable(self.context)
except TypeError:
# could not adapt
# this means we have a dexterity object without
# plone.app.referenceablebehavior activated.
return data
old_security_manager = getSecurityManager()
newSecurityManager(self.context.REQUEST, SpecialUsers.system)
try:
references = referenceable.getBackReferenceImpl()
finally:
setSecurityManager(old_security_manager)
for ref in references:
# get source object
src = ref.getSourceObject()
if src is None:
continue
suid = src.UID()
if suid not in data.keys():
data[suid] = {}
if getattr(ref, 'field', None) is None:
continue
if ref.field in data[suid]:
# we already added this field
continue
else:
# add the field value
field = src.getField(ref.field)
if field:
data[suid][ref.field] = field.getRaw(src)
return data