Commit 0c8ac097 authored by Luke Plant's avatar Luke Plant
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
parent b63157c6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -95,6 +95,9 @@ class QuerySet(object):

    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:
+10 −0
Original line number Diff line number Diff line
@@ -283,6 +283,16 @@ Traceback (most recent call last):
    ...
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.