From 6b880aa8b358d6a80c35525adced2da1d801830c Mon Sep 17 00:00:00 2001 From: Harry Marr Date: Mon, 1 Nov 2010 00:43:30 +0000 Subject: [PATCH] Fixed order-then-filter issue --- mongoengine/queryset.py | 4 +++- tests/queryset.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index f4849619..5737cb33 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -431,7 +431,9 @@ class QuerySet(object): self._cursor_obj.where(self._where_clause) # apply default ordering - if self._document._meta['ordering']: + if self._ordering: + self._cursor_obj.sort(self._ordering) + elif self._document._meta['ordering']: self.order_by(*self._document._meta['ordering']) if self._limit is not None: diff --git a/tests/queryset.py b/tests/queryset.py index 37fe7501..7059659c 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -1395,6 +1395,24 @@ class QuerySetTest(unittest.TestCase): Post.drop_collection() + def test_order_then_filter(self): + """Ensure that ordering still works after filtering. + """ + class Number(Document): + n = IntField() + + Number.drop_collection() + + n2 = Number.objects.create(n=2) + n1 = Number.objects.create(n=1) + + self.assertEqual(list(Number.objects), [n2, n1]) + self.assertEqual(list(Number.objects.order_by('n')), [n1, n2]) + self.assertEqual(list(Number.objects.order_by('n').filter()), [n1, n2]) + + Number.drop_collection() + + class QTest(unittest.TestCase): def test_empty_q(self):