12345678910111213141516171819202122232425262728 |
- class MultiQuerySet(object):
- def __init__(self, *args, **kwargs):
- self.querysets = args
- self._count = None
- def count(self):
- if not self._count:
- self._count = sum(len(qs) for qs in self.querysets)
- return self._count
- def __len__(self):
- return self.count()
- def __getitem__(self, item):
- indices = (offset, stop, step) = item.indices(self.count())
- items = []
- total_len = stop - offset
- for qs in self.querysets:
- if len(qs) < offset:
- offset -= len(qs)
- else:
- items += list(qs[offset:stop])
- if len(items) >= total_len:
- return items
- else:
- offset = 0
- stop = total_len - len(items)
- continue
|