Skip to content
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...
1 parent af2bb17 commit 5cc0f5f8c1f35218ee4bce2d8c943a86f1888b96 @akaariai akaariai committed
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).

0 comments on commit 5cc0f5f

Please sign in to comment.
Something went wrong with that request. Please try again.