Skip to content

Instantly share code, notes, and snippets.

@mattdw
Created March 8, 2012 02:17
Show Gist options
  • Save mattdw/1998113 to your computer and use it in GitHub Desktop.
Save mattdw/1998113 to your computer and use it in GitHub Desktop.
Django MultiQuerySet (for easy reference)
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment