Fixed #22550 -- Prohibited QuerySet.last()/reverse() after slicing.

This commit is contained in:
Matthias Erll 2014-05-17 14:59:57 +02:00 committed by Tim Graham
parent 84fb50df67
commit eee34ef64c
5 changed files with 26 additions and 1 deletions

View file

@ -314,6 +314,18 @@ If you wish to keep this restriction in the admin when editing users, set
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
``QuerySet.reverse()`` and ``last()`` are prohibited after slicing
------------------------------------------------------------------
Calling ``QuerySet.reverse()`` or ``last()`` on a sliced queryset leads to
unexpected results due to the slice being applied after reordering. This is
now prohibited, e.g.::
>>> Model.objects.all()[:2].reverse()
Traceback (most recent call last):
...
TypeError: Cannot reverse a query once a slice has been taken.
Miscellaneous
-------------

View file

@ -361,6 +361,9 @@ every *second* object of the first 10::
>>> Entry.objects.all()[:10:2]
Further filtering or ordering of a sliced queryset is prohibited due to the
ambiguous nature of how that might work.
To retrieve a *single* object rather than a list
(e.g. ``SELECT foo FROM bar LIMIT 1``), use a simple index instead of a
slice. For example, this returns the first ``Entry`` in the database, after