本文整理汇总了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