将两个查询集链接在一起的最佳方法是什么?我试过使用 itertools.chain() 和按位或。
我对 chain() 的问题是它不能很好地与分页配合使用。因为chain() 返回一个列表,当与Django 的分页一起使用时,我得到“异常值:'list' 对象没有属性'_clone'”。
按位或是可以的,但它似乎并没有保留顺序。这两个查询集似乎只是组合在一起。我需要将第一个查询集的项目放在第二个查询集的项目之前。
将两个查询集链接在一起的最佳方法是什么?我试过使用 itertools.chain() 和按位或。
我对 chain() 的问题是它不能很好地与分页配合使用。因为chain() 返回一个列表,当与Django 的分页一起使用时,我得到“异常值:'list' 对象没有属性'_clone'”。
按位或是可以的,但它似乎并没有保留顺序。这两个查询集似乎只是组合在一起。我需要将第一个查询集的项目放在第二个查询集的项目之前。
我不知道这个问题是否有简单的解决方案。以下解决方案将像一个魅力,但它并不简单。
通过以下方式定义您自己的 QuerySum 类:
class QuerySum(object):
def __init__(self, queries):
self.queries = queries
def _clone(self, queries):
return QuerySum(q._clone() for q in self.queries)
def __len__(self, queries):
return sum(len(q) for q in self.queries)
# you should define rest of the methods that paginator uses in similar manner
使用此实现链接查询。