Ticket #9006: queryset_getitem_ordering_fix.diff

File queryset_getitem_ordering_fix.diff, 1009 bytes (added by John Hensley, 11 years ago)

Patch to apply a default ordering to querysets that lack them before slicing or indexing them.

  • django/db/models/query.py

     
    213213                if len(self._result_cache) < bound:
    214214                    self._fill_cache(bound - len(self._result_cache))
    215215            return self._result_cache[k]
    216 
     216       
     217        qs = self._clone()
     218        if not self.model._meta.ordering:
     219            qs.query.add_ordering(self.model._meta.pk.name)
    217220        if isinstance(k, slice):
    218             qs = self._clone()
    219221            if k.start is not None:
    220222                start = int(k.start)
    221223            else:
     
    226228                stop = None
    227229            qs.query.set_limits(start, stop)
    228230            return k.step and list(qs)[::k.step] or qs
     231       
    229232        try:
    230             qs = self._clone()
    231233            qs.query.set_limits(k, k + 1)
    232234            return list(qs)[0]
    233235        except self.model.DoesNotExist, e:
Back to Top