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