Created
March 8, 2012 02:17
-
-
Save mattdw/1998113 to your computer and use it in GitHub Desktop.
Django MultiQuerySet (for easy reference)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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