diff --git a/django_mongodb_engine/compiler.py b/django_mongodb_engine/compiler.py index 542bb389..e5b4db3f 100644 --- a/django_mongodb_engine/compiler.py +++ b/django_mongodb_engine/compiler.py @@ -239,9 +239,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) 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')]