Django

Code

Changeset 7042

Show
Ignore:
Timestamp:
01/28/08 08:27:16 (7 months ago)
Author:
mtredinnick
Message:

queryset-refactor: Added a way to clear all default ordering from a queryset,
by calling order_by() with no parameters.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/queryset-refactor/django/db/models/sql/query.py

    r7031 r7042  
    8989        self.quote_cache = {} 
    9090        self.default_cols = True 
     91        self.default_ordering = True 
    9192 
    9293        # SQL-related attributes 
     
    156157        obj.quote_cache = {} 
    157158        obj.default_cols = self.default_cols 
     159        obj.default_ordering = self.default_ordering 
    158160        obj.select = self.select[:] 
    159161        obj.tables = self.tables[:] 
     
    460462        if self.extra_order_by: 
    461463            ordering = self.extra_order_by 
    462         elif self.order_by is None
     464        elif not self.default_ordering
    463465            ordering = [] 
    464466        else: 
    465             # Note that self.order_by can be empty in two ways: [] ("use the 
    466             # default"), which is handled here, and None ("no ordering"), which 
    467             # is handled in the previous test. 
    468467            ordering = self.order_by or self.model._meta.ordering 
    469468        qn = self.quote_name_unless_alias 
     
    984983        possibly with a direction prefix ('-' or '?') -- or ordinals, 
    985984        corresponding to column positions in the 'select' list. 
     985 
     986        If 'ordering' is empty, all ordering is cleared from the query. 
    986987        """ 
    987988        errors = [] 
     
    991992        if errors: 
    992993            raise TypeError('Invalid order_by arguments: %s' % errors) 
    993         self.order_by.extend(ordering) 
     994        if ordering: 
     995            self.order_by.extend(ordering) 
     996        else: 
     997            self.default_ordering = False 
    994998 
    995999    def clear_ordering(self, force_empty=False): 
     
    9981002        no ordering in the resulting query (not even the model's default). 
    9991003        """ 
     1004        self.order_by = [] 
     1005        self.extra_order_by = [] 
    10001006        if force_empty: 
    1001             self.order_by = None 
    1002         else: 
    1003             self.order_by = [] 
    1004         self.extra_order_by = [] 
     1007            self.default_ordering = False 
    10051008 
    10061009    def add_count_column(self): 
  • django/branches/queryset-refactor/docs/db-api.txt

    r6899 r7042  
    533533 
    534534...since the ``Blog`` model has no default ordering specified. 
     535 
     536**New in Django development version:** If you don't want any ordering to be 
     537applied to a query, not even the default ordering, call ``order_by()`` with no 
     538parameters. 
    535539 
    536540**New in Django development version:** The syntax for ordering across related