2

2つのクエリセットをチェーンするための最良の方法は何ですか?itertools.chain()とビットごとのORを使用してみました。

私がchain()で抱えている問題は、ページ付けではうまく機能しないことです。chain()はリストを返すため、Djangoのページ付けで使用すると、「例外値:'list'オブジェクトには属性'_clone'がありません」というメッセージが表示されます。

ビットごとのORは問題ありませんが、順序が保持されていないようです。2つのクエリセットが組み合わされているようです。最初のクエリセットのアイテムを2番目のクエリセットのアイテムの前に配置する必要があります。

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 に答える