From 605ed429cd7992e3080f8293ce62c98c9c766475 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 12 Aug 2006 21:08:31 +0000 Subject: [PATCH] improved error message when a backref conflicts with a column-based property --- lib/sqlalchemy/orm/properties.py | 2 ++ test/orm/mapper.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 26717fb659..5551348747 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -717,6 +717,8 @@ class BackRef(object): parent = prop.parent.primary_mapper() relation = cls(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): + raise exceptions.ArgumentError("Cant create backref '%s' on mapper '%s'; an incompatible property of that name already exists" % (self.key, str(mapper))) else: # else set one of us as the "backreference" parent = prop.parent.primary_mapper() diff --git a/test/orm/mapper.py b/test/orm/mapper.py index 5cf665fd41..49b5a0cbcb 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -101,6 +101,21 @@ class MapperTest(MapperSuperTest): finally: table.drop() + def testpropconflict(self): + """test that a backref created against an existing mapper with a property name + conflict raises a decent error message""" + mapper(Address, addresses) + mapper(User, users, + properties={ + 'addresses':relation(Address, backref='email_address') + }) + try: + class_mapper(Address) + class_mapper(User) + assert False + except exceptions.ArgumentError: + pass + def testrefresh(self): mapper(User, users, properties={'addresses':relation(mapper(Address, addresses))}) s = create_session() -- 2.47.2