summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/dependency.py18
-rw-r--r--lib/sqlalchemy/orm/properties.py2
-rw-r--r--test/orm/cycles.py2
3 files changed, 13 insertions, 9 deletions
diff --git a/lib/sqlalchemy/orm/dependency.py b/lib/sqlalchemy/orm/dependency.py
index 133d51b7f..5b95b4d7a 100644
--- a/lib/sqlalchemy/orm/dependency.py
+++ b/lib/sqlalchemy/orm/dependency.py
@@ -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)
diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py
index 959c7675e..af98c12cd 100644
--- a/lib/sqlalchemy/orm/properties.py
+++ b/lib/sqlalchemy/orm/properties.py
@@ -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):
diff --git a/test/orm/cycles.py b/test/orm/cycles.py
index 5ec042648..7f7e1ada9 100644
--- a/test/orm/cycles.py
+++ b/test/orm/cycles.py
@@ -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),
)
)