From: Mike Bayer Date: Tue, 22 Apr 2008 15:05:10 +0000 (+0000) Subject: - fixed Class.collection==None for m2m relationships X-Git-Tag: rel_0_5beta1~179 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab5adea36079f23c2436be10a303a5840bd16c21;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - fixed Class.collection==None for m2m relationships [ticket:4213] --- diff --git a/CHANGES b/CHANGES index 3b4f15ee05..e53c101de5 100644 --- a/CHANGES +++ b/CHANGES @@ -33,6 +33,9 @@ CHANGES query rows, when the extension is present and only a single- entity result is being returned. + - fixed Class.collection==None for m2m relationships + [ticket:4213] + - sql - Added COLLATE support via the .collate() expression operator and collate(, ) sql diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 55f6c98752..847e793986 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -288,7 +288,7 @@ class PropertyLoader(StrategizedProperty): def __eq__(self, other): if other is None: - if self.prop.direction == ONETOMANY: + if self.prop.direction in [ONETOMANY, MANYTOMANY]: return ~sql.exists([1], self.prop.primaryjoin) else: return self.prop._optimized_compare(None) diff --git a/test/orm/query.py b/test/orm/query.py index c5dde6938a..4589cf9635 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -386,6 +386,10 @@ class FilterTest(QueryTest): dingaling = sess.query(Dingaling).get(2) assert [Address(id=5)] == sess.query(Address).filter(Address.dingaling==dingaling).all() + # m2m + self.assertEquals(sess.query(Item).filter(Item.keywords==None).all(), [Item(id=4), Item(id=5)]) + self.assertEquals(sess.query(Item).filter(Item.keywords!=None).all(), [Item(id=1),Item(id=2), Item(id=3)]) + def test_filter_by(self): sess = create_session() user = sess.query(User).get(8)