In your example "print qs[0]" evaluates a *clone* of "qs", not "qs" itself.
Therefore "qs[0]; qs[-1]; qs[0]" triggers 3 queries, just like "qs[0]; qs[0]; qs[0]" would. Now, if you really evaluate your "qs", for example by doing "list(qs)", then further slicing/indexing on "qs" would operate on the cached result, which internally is a plain Python list. I've put together a quick and dirty proof of concept: https://github.com/loic/django/compare/ticket13089. -- Loic On Jul 31, 2013, at 10:16 PM, Tom Evans <tevans...@googlemail.com> wrote: > What would it do if the query had already been evaluated? IE, how many > queries does this run? > > qs = Model.objects.filter(…).order_by(…) > print qs[0] > print qs[-1] > print qs[0] -- You received this message because you are subscribed to the Google Groups "Django developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers. For more options, visit https://groups.google.com/groups/opt_out.