From 1d6770a93501c1ab5f7fdfa9785cd71640b62c7f Mon Sep 17 00:00:00 2001 From: Adam Cezar Jenkins Date: Wed, 23 Nov 2011 18:27:00 -0600 Subject: [PATCH 1/2] More explicit $in checking --- django_mongodb_engine/compiler.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/django_mongodb_engine/compiler.py b/django_mongodb_engine/compiler.py index 7163423f..4a67c878 100644 --- a/django_mongodb_engine/compiler.py +++ b/django_mongodb_engine/compiler.py @@ -238,9 +238,12 @@ def add_filters(self, filters, query=None): else: existing.update(lookup) else: - # {'$gt': o1} + {'$lt': o2} --> {'$gt': o1, '$lt': o2} - assert all(key not in existing for key in lookup.keys()), [lookup, existing] - existing.update(lookup) + if '$in' in lookup and '$in' in existing: + existing['$in'] = list(set(lookup['$in'] + existing['$in'])) + else: + # {'$gt': o1} + {'$lt': o2} --> {'$gt': o1, '$lt': o2} + assert all(key not in existing for key in lookup.keys()), [lookup, existing] + existing.update(lookup) else: key = '$nin' if self._negated else '$all' existing.setdefault(key, []).append(lookup) From d6e1b88f760f67d8c93d1d5b5bd1c1cc5ccceef2 Mon Sep 17 00:00:00 2001 From: Adam Cezar Jenkins Date: Tue, 24 Jan 2012 20:17:48 -0600 Subject: [PATCH 2/2] Testing chained pk lookups --- tests/query/tests.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/query/tests.py b/tests/query/tests.py index e9d0741c..9ac366ab 100644 --- a/tests/query/tests.py +++ b/tests/query/tests.py @@ -234,6 +234,13 @@ def test_multiple_filter_on_same_name(self): [] ) + # Tests chaining on primary keys + blog_id = Blog.objects.get().id + self.assertEqual( + Blog.objects.filter(pk = blog_id).filter(pk = blog_id).get(), + Blog.objects.get() + ) + def test_negated_Q(self): blogs = [Blog.objects.create(title=title) for title in ('blog', 'other blog', 'another blog')]