5

私は次のようなクエリを使用しています。

    filters = Q(is_default = False)
    # Build the excludes and filters dynamically 
    if cut:
        filters = filters & Q(mailbagstats__num_letters2__gt = int(cut) )

クエリが与えられた場合、filters Qクエリのpop1つを使用できますか?

Q(mailbagstats__num_letters2__gt= int(cut) )このQクエリからクエリを削除して、新しいフィルターを作成したいと思います。

通常、私はリストを使用しますreduceが、これは経由で作成される Q() & Q()ため、変更方法がわかりません。

あなたが持っているかもしれないどんな入力にも感謝します!

4

2 に答える 2

6

あなたはそれらをすることができpopます:

>>> filter = Q(a=True)
>>> filter = filter & Q(b=True)
>>> filter.children
[('a', True), ('b', True)]
>>> filter.children.pop()
('b', True)
>>> filter.children
[('a', True)]
于 2012-09-11T21:13:48.570 に答える
1

リストを操作して、最後にフィルターを作成してみませんか?

filters = []
filters.append(Q(is_default = False))
# Build the excludes and filters dynamically 
if cut:
    filters.append(Q(mailbagstats__num_letters2__gt = int(cut)))

# I want to pop the last one
filters.pop()

# build the filter before making the query
# Note that this call will remove an element from the filters list
filters_for_query = reduce(lambda a, x: a & x, filters, filters.pop())

Model.objects.filter(filters_for_query)
于 2012-09-11T21:13:10.507 に答える