2

将两个查询集链接在一起的最佳方法是什么?我试过使用 itertools.chain() 和按位或。

我对 chain() 的问题是它不能很好地与分页配合使用。因为chain() 返回一个列表,当与Django 的分页一起使用时,我得到“异常值:'list' 对象没有属性'_clone'”。

按位或是可以的,但它似乎并没有保留顺序。这两个查询集似乎只是组合在一起。我需要将第一个查询集的项目放在第二个查询集的项目之前。

4

1 回答 1

0

我不知道这个问题是否有简单的解决方案。以下解决方案将像一个魅力,但它并不简单。

通过以下方式定义您自己的 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

使用此实现链接查询。

于 2012-04-09T15:19:47.780 回答