Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Made negative indexing on QuerySet instances raise an assertion error…

… (previously

it just returned incorrect results).


git-svn-id: http://code.djangoproject.com/svn/django/trunk@2992 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 0c8ac0972c9b1a5af95d40334b83cf5f31d56331 1 parent b63157c
@spookylukey spookylukey authored
Showing with 13 additions and 0 deletions.
  1. +3 −0  django/db/models/query.py
  2. +10 −0 tests/modeltests/basic/models.py
View
3  django/db/models/query.py
@@ -95,6 +95,9 @@ def __iter__(self):
def __getitem__(self, k):
"Retrieve an item or slice from the set of results."
+ assert (not isinstance(k, slice) and (k >= 0)) \
+ or (isinstance(k, slice) and (k.start is None or k.start >= 0) and (k.stop is None or k.stop >= 0)), \
+ "Negative indexing is not supported."
if self._result_cache is None:
if isinstance(k, slice):
# Offset:
View
10 tests/modeltests/basic/models.py
@@ -283,6 +283,16 @@ def __repr__(self):
...
AssertionError: Cannot combine queries once a slice has been taken.
+# Negative slices are not supported, due to database constraints.
+# (hint: inverting your ordering might do what you need).
+>>> Article.objects.all()[-1]
+Traceback (most recent call last):
+ ...
+AssertionError: Negative indexing is not supported.
+>>> Article.objects.all()[0:-5]
+Traceback (most recent call last):
+ ...
+AssertionError: Negative indexing is not supported.
# An Article instance doesn't have access to the "objects" attribute.
# That's only available on the class.
Please sign in to comment.
Something went wrong with that request. Please try again.