我正在使用itertools.chain
Python 中的方法将几个 Django 链接Querysets
在一起。通过这样做,我不会接触数据库,这是我需要的有效行为。但是,我使用第三方库对这些结果进行分页,并且该库仅接受列表和查询集对象。使用链对象调用它时,出现以下错误:
Exception Value: 'itertools.chain' object has no attribute '__getitem__'
图书馆(django-pagemore)中实际上让我发疯的行是:
objects = self.objects[page0*self.per_page:1+page*self.per_page]
这里的问题是,当使用链时,你不能切片它。
我知道我可以使用list()
方法轻松地将链对象转换为列表,但这会评估整个查询集,并且其中可以包含数千个项目。
在对如何计算 Python 对象的大小进行了一些研究之后,
我做了一些测试和使用sys.getsizeof(cPickle.dumps(content))
(content
链中的一个对象在哪里)给了我一个值15,915 bytes
,因此包含 3,000 个这些对象的链需要45.53 MB
aprox!