ここでの質問と回答に基づいて、マップ/リデュースとラムダ式を使用して、mongo エンジンで複雑なクエリを動的に構築する方法を理解することができました。
ただし、OR クエリを AND クエリに切り替えようとしたときに、問題が発生しました (皮肉なことに、上記の質問の投稿者も、最初の質問に回答した後にそうしました)。
私が実行しているコードは次のとおりです。
titles = ['topic1', 'topic2', 'topic3']
query = reduce(lambda q1, q2: q1.__and__(q2),
map(lambda the_title: Q(slug__iexact=the_title), titles))
threats = Threat.objects.filter(query)
これを行うと、次のエラーが表示されます。
InvalidQueryError: Duplicate query conditions: slug__iexact
ただし、同じコードを実行すると、代わり__and__
に__or__
、クエリは完全に機能します。
いつものように、私は専門家ではなく、行っていくうちに物事を把握しているので、明らかな何かが欠けている可能性があります。ここでアイデアをお寄せいただきありがとうございます。