More efficient way to manage back references.

This commit is contained in:
Gaetan Delannay 2010-03-09 15:10:58 +01:00
parent 9b01295145
commit a52c6e0ffd

View file

@ -933,14 +933,11 @@ class AbstractMixin:
'''This method returns the list of objects linked to this one '''This method returns the list of objects linked to this one
through the BackRef corresponding to the Archetypes through the BackRef corresponding to the Archetypes
relationship named p_relName.''' relationship named p_relName.'''
res = [] # Preamble: must I return a list or a single element?
maxOne = False
if noListIfSingleObj:
# I must get the referred appyType to know its maximum multiplicity.
referers = self.getProductConfig().referers referers = self.getProductConfig().referers
objs = self.getBRefs(relName)
for obj in objs:
if not ploneObjects:
obj = obj.appy()
res.append(obj)
if res and noListIfSingleObj:
className = self.__class__.__name__ className = self.__class__.__name__
appyType = None appyType = None
for anAppyType, rel in referers[className]: for anAppyType, rel in referers[className]:
@ -948,7 +945,19 @@ class AbstractMixin:
appyType = anAppyType appyType = anAppyType
break break
if appyType.back.multiplicity[1] == 1: if appyType.back.multiplicity[1] == 1:
res = res[0] maxOne = True
# Get the referred objects through the Archetypes relationship.
objs = self.getBRefs(relName)
if maxOne:
res = None
if objs:
res = objs[0]
if not ploneObjects:
res = res.appy()
else:
res = objs
if not ploneObjects:
res = [o.appy() for o in objs]
return res return res
def _appy_showPage(self, page, pageShow): def _appy_showPage(self, page, pageShow):