2012-04-08 10 views
2

將兩個查詢集鏈接在一起的最佳方式是什麼?我試過使用itertools.chain()和按位或。Django - 如何以有效的方式鏈接兩個查詢集並保留排序

我與鏈()有關的問題是,它不能很好地與分頁。因爲chain()返回一個列表,當與Django的分頁一起使用時,我會得到「Exception Value:'列表'object no no attribute'_clone'」。按位或還是可以的,但它似乎並不能保留排序。這兩個查詢集合似乎是合併的。我需要將第一個查詢集的項目放在第二個查詢集的項目之前。

+0

'chain'不返回一個'list',它返回一個'chain'。 'itertools'函數/類沒有返回序列,它們都返回迭代。 – agf 2012-04-08 23:57:52

回答

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 

使用此實施鏈查詢。