diff --git a/plone/app/versioningbehavior/modifiers.py b/plone/app/versioningbehavior/modifiers.py index 386ac6d..4b76369 100644 --- a/plone/app/versioningbehavior/modifiers.py +++ b/plone/app/versioningbehavior/modifiers.py @@ -5,6 +5,7 @@ from plone.behavior.registration import lookup_behavior_registration from plone.dexterity.interfaces import IDexterityContent from plone.dexterity.utils import iterSchemata +from plone.dexterity.utils import resolveDottedName from plone.namedfile.interfaces import INamedBlobFileField from plone.namedfile.interfaces import INamedBlobImageField from Products.CMFCore.utils import getToolByName @@ -170,6 +171,7 @@ def reattachReferencedAttributes(self, obj, attrs_dict): obj = aq_base(obj) for name, blob in six.iteritems(attrs_dict): iface_name, f_name = name.rsplit('.', 1) + # In case the field is provided via a behavior: # Look up the behavior via dotted name. # If the behavior's dotted name was changed, we might still have # the old name in our attrs_dict. @@ -178,9 +180,10 @@ def reattachReferencedAttributes(self, obj, attrs_dict): # be found. try: behavior = lookup_behavior_registration(iface_name) + iface = behavior.interface except BehaviorRegistrationNotFound: - return - iface = behavior.interface + # Not a behavior - fetch the interface directly + iface = resolveDottedName(iface_name) field = iface.get(f_name) if field is not None: # Field may have been removed from schema adapted_field = field.get(iface(obj))