]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
made backrefs aware of "post_update" and "viewonly" so it doesnt have to be explicitl...
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Dec 2006 03:16:35 +0000 (03:16 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Dec 2006 03:16:35 +0000 (03:16 +0000)
lib/sqlalchemy/orm/dependency.py
lib/sqlalchemy/orm/properties.py
test/orm/cycles.py

index 133d51b7fc3c6844d00c52cd3522ea5a4dbad90a..5b95b4d7ac844d3748cb01e7d479c135ad92b8fb 100644 (file)
@@ -115,10 +115,11 @@ class DependencyProcessor(object):
 class OneToManyDP(DependencyProcessor):
     def register_dependencies(self, uowcommit):
         if self.post_update:
-            stub = MapperStub(self.parent, self.mapper, self.key)
-            uowcommit.register_dependency(self.mapper, stub)
-            uowcommit.register_dependency(self.parent, stub)
-            uowcommit.register_processor(stub, self, self.parent)
+            if not self.is_backref:
+                stub = MapperStub(self.parent, self.mapper, self.key)
+                uowcommit.register_dependency(self.mapper, stub)
+                uowcommit.register_dependency(self.parent, stub)
+                uowcommit.register_processor(stub, self, self.parent)
         else:
             uowcommit.register_dependency(self.parent, self.mapper)
             uowcommit.register_processor(self.parent, self, self.parent)
@@ -204,10 +205,11 @@ class OneToManyDP(DependencyProcessor):
 class ManyToOneDP(DependencyProcessor):
     def register_dependencies(self, uowcommit):
         if self.post_update:
-            stub = MapperStub(self.parent, self.mapper, self.key)
-            uowcommit.register_dependency(self.mapper, stub)
-            uowcommit.register_dependency(self.parent, stub)
-            uowcommit.register_processor(stub, self, self.parent)
+            if not self.is_backref:
+                stub = MapperStub(self.parent, self.mapper, self.key)
+                uowcommit.register_dependency(self.mapper, stub)
+                uowcommit.register_dependency(self.parent, stub)
+                uowcommit.register_processor(stub, self, self.parent)
         else:
             uowcommit.register_dependency(self.mapper, self.parent)
             uowcommit.register_processor(self.mapper, self, self.parent)
index 959c7675e025b9448b853ad2acce4fcbb1045093..af98c12cd79fa99dc93333edb010624248f13aea 100644 (file)
@@ -306,6 +306,8 @@ class BackRef(object):
             sj = self.kwargs.pop('secondaryjoin', None)
             # the backref property is set on the primary mapper
             parent = prop.parent.primary_mapper()
+            self.kwargs.setdefault('viewonly', prop.viewonly)
+            self.kwargs.setdefault('post_update', prop.post_update)
             relation = PropertyLoader(parent, prop.secondary, pj, sj, backref=prop.key, is_backref=True, **self.kwargs)
             mapper._compile_property(self.key, relation);
         elif not isinstance(mapper.props[self.key], PropertyLoader):
index 5ec04264891c8ffdc95c4ed3becf2f17a93c1d0a..7f7e1ada94d0581e8ca3394a53ebba5923a28ca6 100644 (file)
@@ -496,7 +496,7 @@ class OneToManyManyToOneTest(AssertMixin):
 
         Ball.mapper = mapper(Ball, ball)
         Person.mapper = mapper(Person, person, properties= dict(
-         balls = relation(Ball.mapper, primaryjoin=ball.c.person_id==person.c.id, foreignkey=ball.c.person_id, private=True, post_update=True),
+         balls = relation(Ball.mapper, primaryjoin=ball.c.person_id==person.c.id, foreignkey=ball.c.person_id, private=True, post_update=True, backref='person'),
          favorateBall = relation(Ball.mapper, primaryjoin=person.c.favorite_ball_id==ball.c.id, foreignkey=person.c.favorite_ball_id),
          )
         )