Skip to content

Commit 6c6dc8f

Browse files
committed
[soc2010/query-refactor] Implemented order_by, also fixed a typo in "The Beatles", sorry.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13370 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent bf071f7 commit 6c6dc8f

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

django/contrib/mongodb/compiler.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from pymongo import ASCENDING, DESCENDING
2+
13
from django.db.models.sql.datastructures import FullResultSet
24

35

@@ -62,10 +64,15 @@ def build_query(self, aggregates=False):
6264
assert not self.query.extra
6365
assert not self.query.having
6466
assert self.query.high_mark is None
65-
assert not self.query.order_by
6667

6768
filters = self.get_filters(self.query.where)
68-
return self.connection.db[self.query.model._meta.db_table].find(filters)
69+
cursor = self.connection.db[self.query.model._meta.db_table].find(filters)
70+
if self.query.order_by:
71+
cursor = cursor.sort([
72+
(ordering.lstrip("-"), DESCENDING if ordering.startswith("-") else ASCENDING)
73+
for ordering in self.query.order_by
74+
])
75+
return cursor
6976

7077
def results_iter(self):
7178
query = self.build_query()

tests/regressiontests/mongodb/tests.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,39 @@ def test_exists(self):
6363
Artist.objects.create(name="Brian May")
6464
self.assertTrue(Artist.objects.filter(name="Brian May").exists())
6565

66+
def test_orderby(self):
67+
Group.objects.create(name="Queen", year_formed=1971)
68+
Group.objects.create(name="The E Street Band", year_formed=1972)
69+
Group.objects.create(name="The Beatles", year_formed=1960)
70+
71+
self.assertQuerysetEqual(
72+
Group.objects.order_by("year_formed"), [
73+
"The Beatles",
74+
"Queen",
75+
"The E Street Band",
76+
],
77+
lambda g: g.name
78+
)
79+
80+
self.assertQuerysetEqual(
81+
Group.objects.order_by("-year_formed"), [
82+
"The E Street Band",
83+
"Queen",
84+
"The Beatles",
85+
],
86+
lambda g: g.name,
87+
)
88+
89+
6690
def test_not_equals(self):
6791
q = Group.objects.create(name="Queen", year_formed=1971)
6892
e = Group.objects.create(name="The E Street Band", year_formed=1972)
69-
b = Group.objects.create(name="The Beetles")
93+
b = Group.objects.create(name="The Beatles")
7094

7195
self.assertQuerysetEqual(
7296
Group.objects.exclude(year_formed=1972), [
7397
"Queen",
74-
"The Beetles",
98+
"The Beatles",
7599
],
76100
lambda g: g.name,
77101
)

0 commit comments

Comments
 (0)