+
+
+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):
+ try:
+ indices = (offset, stop, step) = item.indices(self.count())
+ except AttributeError:
+ # it's not a slice - make it one
+ return self[item : item + 1][0]
+ 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
\ No newline at end of file