diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-01-28 14:27:16 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-01-28 14:27:16 +0000 |
| commit | 911e65ada72d6faeecd156d285ac661058aa0f35 (patch) | |
| tree | ca00f1c4b650960ddd9e92f29ed86d3dbecf82d7 /django/db/models/sql | |
| parent | e016a4f987efc6c43ea6c80540456cdd161b2434 (diff) | |
queryset-refactor: Added a way to clear all default ordering from a queryset,
by calling order_by() with no parameters.
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7042 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/sql')
| -rw-r--r-- | django/db/models/sql/query.py | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 1343f17209..ee76523c3b 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -88,6 +88,7 @@ class Query(object): self.rev_join_map = {} # Reverse of join_map. self.quote_cache = {} self.default_cols = True + self.default_ordering = True # SQL-related attributes self.select = [] @@ -155,6 +156,7 @@ class Query(object): obj.rev_join_map = copy.deepcopy(self.rev_join_map) obj.quote_cache = {} obj.default_cols = self.default_cols + obj.default_ordering = self.default_ordering obj.select = self.select[:] obj.tables = self.tables[:] obj.where = copy.deepcopy(self.where) @@ -459,12 +461,9 @@ class Query(object): """ if self.extra_order_by: ordering = self.extra_order_by - elif self.order_by is None: + elif not self.default_ordering: ordering = [] else: - # Note that self.order_by can be empty in two ways: [] ("use the - # default"), which is handled here, and None ("no ordering"), which - # is handled in the previous test. ordering = self.order_by or self.model._meta.ordering qn = self.quote_name_unless_alias distinct = self.distinct @@ -983,6 +982,8 @@ class Query(object): clause. These items are either field names (not column names) -- possibly with a direction prefix ('-' or '?') -- or ordinals, corresponding to column positions in the 'select' list. + + If 'ordering' is empty, all ordering is cleared from the query. """ errors = [] for item in ordering: @@ -990,18 +991,20 @@ class Query(object): errors.append(item) if errors: raise TypeError('Invalid order_by arguments: %s' % errors) - self.order_by.extend(ordering) + if ordering: + self.order_by.extend(ordering) + else: + self.default_ordering = False def clear_ordering(self, force_empty=False): """ Removes any ordering settings. If 'force_empty' is True, there will be no ordering in the resulting query (not even the model's default). """ - if force_empty: - self.order_by = None - else: - self.order_by = [] + self.order_by = [] self.extra_order_by = [] + if force_empty: + self.default_ordering = False def add_count_column(self): """ |
