Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Made Query.clear_ordering force_empty arg mandatory

Previously it was possible to call clear_ordering without the
force_empty argument. The result was that the query was still ordered
by model's meta ordering if that was defined. By making the arg
mandatory it will be easier to spot possible errors caused by assuming
clear_ordering will remove all ordering.

Thanks to Dylan Klomparens for the suggestion. Refs #19720.
  • Loading branch information...
commit 5cc0f5f8c1f35218ee4bce2d8c943a86f1888b96 1 parent af2bb17
@akaariai akaariai authored
Showing with 3 additions and 3 deletions.
  1. +2 −2 django/db/models/query.py
  2. +1 −1  django/db/models/sql/query.py
View
4 django/db/models/query.py
@@ -500,7 +500,7 @@ def _earliest_or_latest(self, field_name=None, direction="-"):
"Cannot change a query once a slice has been taken."
obj = self._clone()
obj.query.set_limits(high=1)
- obj.query.clear_ordering()
+ obj.query.clear_ordering(force_empty=True)
obj.query.add_ordering('%s%s' % (direction, order_by))
return obj.get()
@@ -793,7 +793,7 @@ def order_by(self, *field_names):
assert self.query.can_filter(), \
"Cannot reorder a query once a slice has been taken."
obj = self._clone()
- obj.query.clear_ordering()
+ obj.query.clear_ordering(force_empty=False)
obj.query.add_ordering(*field_names)
return obj
View
2  django/db/models/sql/query.py
@@ -1638,7 +1638,7 @@ def add_ordering(self, *ordering):
else:
self.default_ordering = False
- def clear_ordering(self, force_empty=False):
+ def clear_ordering(self, force_empty):
"""
Removes any ordering settings. If 'force_empty' is True, there will be
no ordering in the resulting query (not even the model's default).
Please sign in to comment.
Something went wrong with that request. Please try again.