1

Python/Django でアプリケーションを作成しています。Python の operator.or_ 関数を使用して Q オブジェクトのリストを減らしてフィルターを作成しようとしています。AND残念ながら、ではなくと組み合わされたリストになりoperator.or_ます。この問題は、次のコードで発生します。

print 'operator.or_', operator.or_
filter = reduce(operator.or_, q_objects[key])
print key, '->', filter

ステートメント

print 'operator.or_', operator.or_

結果は

operator.or_ <built-in function or_>

それで成功したようです。でも、

filter = reduce(operator.or_, q_objects[key])
print key, '->', filter    

結果は (書式が追加された状態で)

some_key -> (
        AND: 
        ('some_field__icontains', u'search string 1'), 
        ('other_field__icontains', u'search string 2')
    )

ご覧のとおり、結果にはANDではなく がありORます。誰かが私が間違っていることを見ることができますか?

に関してq_objects[key]は、次のように作成されます。

q_dict = {'some_field__icontains': u'search string 1', 'other_field__icontains': u'search string 2'}
q_objects[key] = [Q(**q_dict)]
4

1 に答える 1

2
q_objects[type] = [Q(**q_dict)]

いいえ。各要素を個別に処理する必要があります。

q_objects[type] = [Q(**{k: v}) for (k, v) in q_dict.iteritems()]
于 2011-11-15T16:07:00.467 に答える