]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
attempting to get MTOBackrefExtension to handle many-to-one, one-to-one equally
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 3 Feb 2006 01:15:06 +0000 (01:15 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 3 Feb 2006 01:15:06 +0000 (01:15 +0000)
lib/sqlalchemy/attributes.py

index f2480918d49b3d4f744218ce6d1e2d490f51d780..87b09507f9b8bea099d224c51d04b8269fb5bd57 100644 (file)
@@ -89,6 +89,10 @@ class PropHistory(object):
         self.obj.__dict__[self.key] = None
         if self.extension is not None:
             self.extension.set(self.obj, None, self.orig)
+    def append(self, obj):
+        self.setattr(obj)
+    def remove(self, obj):
+        self.delattr()
     def rollback(self):
         if self.orig is not PropHistory.NONE:
             self.obj.__dict__[self.key] = self.orig
@@ -242,9 +246,12 @@ class MTOBackrefExtension(AttributeExtension):
         self.key = key
     def set(self, obj, child, oldchild):
         if oldchild is not None:
-            getattr(oldchild, self.key).remove(obj)
+            prop = oldchild.__class__._attribute_manager.get_history(oldchild, self.key)
+            prop.remove(obj)
         if child is not None:
-            getattr(child, self.key).append(obj)
+            prop = child.__class__._attribute_manager.get_history(child, self.key)
+            prop.append(obj)
+            
 class AttributeManager(object):
     """maintains a set of per-attribute history container objects for a set of objects."""
     def __init__(self):