Django

Code

Changeset 2970

Show
Ignore:
Timestamp:
05/23/06 14:55:30 (2 years ago)
Author:
lukeplant
Message:

Fixed bug with Meta.ordering being ignored when slicing a single item off a QuerySet?. Thanks, Gábor Fawkes.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/base.py

    r2947 r2970  
    270270        try: 
    271271            return q[0] 
    272         except IndexError, e
    273             raise self.DoesNotExist, e.args 
     272        except IndexError
     273            raise self.DoesNotExist, "%s matching query does not exist." % self.__class__._meta.object_name 
    274274 
    275275    def _get_next_or_previous_in_order(self, is_next): 
  • django/trunk/django/db/models/query.py

    r2902 r2970  
    130130            else: 
    131131                try: 
    132                     return self._clone(_offset=k, _limit=1).get() 
     132                    return list(self._clone(_offset=k, _limit=1))[0] 
    133133                except self.model.DoesNotExist, e: 
    134134                    raise IndexError, e.args 
     
    194194        "Performs the SELECT and returns a single object matching the given keyword arguments." 
    195195        clone = self.filter(*args, **kwargs) 
     196        # clean up SQL by removing unneeded ORDER BY 
    196197        if not clone._order_by: 
    197198            clone._order_by = () 
  • django/trunk/tests/modeltests/ordering/models.py

    r2809 r2970  
    5757[Article 2, Article 3] 
    5858 
     59# Getting a single item should work too: 
     60>>> Article.objects.all()[0] 
     61Article 4 
     62 
    5963# Use '?' to order randomly. (We're using [...] in the output to indicate we 
    6064# don't know what order the output will be in.