Merge remote-tracking branch 'elasticsales/clear-default-ordering'
This commit is contained in:
commit
2312e17a8e
@ -50,7 +50,7 @@ class BaseQuerySet(object):
|
|||||||
self._initial_query = {}
|
self._initial_query = {}
|
||||||
self._where_clause = None
|
self._where_clause = None
|
||||||
self._loaded_fields = QueryFieldList()
|
self._loaded_fields = QueryFieldList()
|
||||||
self._ordering = []
|
self._ordering = None
|
||||||
self._snapshot = False
|
self._snapshot = False
|
||||||
self._timeout = True
|
self._timeout = True
|
||||||
self._class_check = True
|
self._class_check = True
|
||||||
@ -1206,8 +1206,9 @@ class BaseQuerySet(object):
|
|||||||
if self._ordering:
|
if self._ordering:
|
||||||
# Apply query ordering
|
# Apply query ordering
|
||||||
self._cursor_obj.sort(self._ordering)
|
self._cursor_obj.sort(self._ordering)
|
||||||
elif self._document._meta['ordering']:
|
elif self._ordering is None and self._document._meta['ordering']:
|
||||||
# Otherwise, apply the ordering from the document model
|
# Otherwise, apply the ordering from the document model, unless
|
||||||
|
# it's been explicitly cleared via order_by with no arguments
|
||||||
order = self._get_order_by(self._document._meta['ordering'])
|
order = self._get_order_by(self._document._meta['ordering'])
|
||||||
self._cursor_obj.sort(order)
|
self._cursor_obj.sort(order)
|
||||||
|
|
||||||
|
@ -1040,6 +1040,76 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
expected = [blog_post_1, blog_post_2, blog_post_3]
|
expected = [blog_post_1, blog_post_2, blog_post_3]
|
||||||
self.assertSequence(qs, expected)
|
self.assertSequence(qs, expected)
|
||||||
|
|
||||||
|
def test_clear_ordering(self):
|
||||||
|
""" Make sure one can clear the query set ordering by applying a
|
||||||
|
consecutive order_by()
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Person(Document):
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
Person.drop_collection()
|
||||||
|
Person(name="A").save()
|
||||||
|
Person(name="B").save()
|
||||||
|
|
||||||
|
qs = Person.objects.order_by('-name')
|
||||||
|
|
||||||
|
# Make sure we can clear a previously specified ordering
|
||||||
|
with query_counter() as q:
|
||||||
|
lst = list(qs.order_by())
|
||||||
|
|
||||||
|
op = q.db.system.profile.find({"ns":
|
||||||
|
{"$ne": "%s.system.indexes" % q.db.name}})[0]
|
||||||
|
|
||||||
|
self.assertTrue('$orderby' not in op['query'])
|
||||||
|
self.assertEqual(lst[0].name, 'A')
|
||||||
|
|
||||||
|
# Make sure previously specified ordering is preserved during
|
||||||
|
# consecutive calls to the same query set
|
||||||
|
with query_counter() as q:
|
||||||
|
lst = list(qs)
|
||||||
|
|
||||||
|
op = q.db.system.profile.find({"ns":
|
||||||
|
{"$ne": "%s.system.indexes" % q.db.name}})[0]
|
||||||
|
|
||||||
|
self.assertTrue('$orderby' in op['query'])
|
||||||
|
self.assertEqual(lst[0].name, 'B')
|
||||||
|
|
||||||
|
def test_clear_default_ordering(self):
|
||||||
|
|
||||||
|
class Person(Document):
|
||||||
|
name = StringField()
|
||||||
|
meta = {
|
||||||
|
'ordering': ['-name']
|
||||||
|
}
|
||||||
|
|
||||||
|
Person.drop_collection()
|
||||||
|
Person(name="A").save()
|
||||||
|
Person(name="B").save()
|
||||||
|
|
||||||
|
qs = Person.objects
|
||||||
|
|
||||||
|
# Make sure clearing default ordering works
|
||||||
|
with query_counter() as q:
|
||||||
|
lst = list(qs.order_by())
|
||||||
|
|
||||||
|
op = q.db.system.profile.find({"ns":
|
||||||
|
{"$ne": "%s.system.indexes" % q.db.name}})[0]
|
||||||
|
|
||||||
|
self.assertTrue('$orderby' not in op['query'])
|
||||||
|
self.assertEqual(lst[0].name, 'A')
|
||||||
|
|
||||||
|
# Make sure default ordering is preserved during consecutive calls
|
||||||
|
# to the same query set
|
||||||
|
with query_counter() as q:
|
||||||
|
lst = list(qs)
|
||||||
|
|
||||||
|
op = q.db.system.profile.find({"ns":
|
||||||
|
{"$ne": "%s.system.indexes" % q.db.name}})[0]
|
||||||
|
|
||||||
|
self.assertTrue('$orderby' in op['query'])
|
||||||
|
self.assertEqual(lst[0].name, 'B')
|
||||||
|
|
||||||
def test_find_embedded(self):
|
def test_find_embedded(self):
|
||||||
"""Ensure that an embedded document is properly returned from a query.
|
"""Ensure that an embedded document is properly returned from a query.
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user