Author: lukeplant
Date: 2006-05-23 14:55:30 -0500 (Tue, 23 May 2006)
New Revision: 2970

Modified:
   django/trunk/django/db/models/base.py
   django/trunk/django/db/models/query.py
   django/trunk/tests/modeltests/ordering/models.py
Log:
Fixed bug with Meta.ordering being ignored when slicing a single item off a 
QuerySet.  Thanks, G?\195?\161bor Fawkes.

Modified: django/trunk/django/db/models/base.py
===================================================================
--- django/trunk/django/db/models/base.py       2006-05-23 19:34:43 UTC (rev 
2969)
+++ django/trunk/django/db/models/base.py       2006-05-23 19:55:30 UTC (rev 
2970)
@@ -269,8 +269,8 @@
         q._params.extend([param, param, getattr(self, self._meta.pk.attname)])
         try:
             return q[0]
-        except IndexError, e:
-            raise self.DoesNotExist, e.args
+        except IndexError:
+            raise self.DoesNotExist, "%s matching query does not exist." % 
self.__class__._meta.object_name
 
     def _get_next_or_previous_in_order(self, is_next):
         cachename = "__%s_order_cache" % is_next

Modified: django/trunk/django/db/models/query.py
===================================================================
--- django/trunk/django/db/models/query.py      2006-05-23 19:34:43 UTC (rev 
2969)
+++ django/trunk/django/db/models/query.py      2006-05-23 19:55:30 UTC (rev 
2970)
@@ -129,7 +129,7 @@
                     return list(self._clone(_offset=offset, 
_limit=limit))[::k.step]
             else:
                 try:
-                    return self._clone(_offset=k, _limit=1).get()
+                    return list(self._clone(_offset=k, _limit=1))[0]
                 except self.model.DoesNotExist, e:
                     raise IndexError, e.args
         else:
@@ -193,6 +193,7 @@
     def get(self, *args, **kwargs):
         "Performs the SELECT and returns a single object matching the given 
keyword arguments."
         clone = self.filter(*args, **kwargs)
+        # clean up SQL by removing unneeded ORDER BY
         if not clone._order_by:
             clone._order_by = ()
         obj_list = list(clone)

Modified: django/trunk/tests/modeltests/ordering/models.py
===================================================================
--- django/trunk/tests/modeltests/ordering/models.py    2006-05-23 19:34:43 UTC 
(rev 2969)
+++ django/trunk/tests/modeltests/ordering/models.py    2006-05-23 19:55:30 UTC 
(rev 2970)
@@ -56,6 +56,10 @@
 >>> Article.objects.order_by('headline')[1:3]
 [Article 2, Article 3]
 
+# Getting a single item should work too:
+>>> Article.objects.all()[0]
+Article 4
+
 # Use '?' to order randomly. (We're using [...] in the output to indicate we
 # don't know what order the output will be in.
 >>> Article.objects.order_by('?')


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates
-~----------~----~----~----~------~----~------~--~---

Reply via email to