2017-10-27 17 views
0

リスト付きのQueryDictがあります。'value': ['1', '2', '3', '4', '5'] - 要素の数は不明です。私が使用してモデルOR条件をフィルタリングするために、このリストを変換する必要があります。Django - リストをQオブジェクトの結合ORに変換する正しい方法

SQLで
Poll.objects.get(Q(value__icontains=option[0]) | Q(value__icontains=option[1])) 

AND (value LIKE '%1%' OR value LIKE '%2%') 

これが正しいと簡単な方法を達成するためにどのように?

答えて

0

Poll.objects.get(value__in=['1', '2', '3', '4', '5'])とする必要があります。

または、大文字小文字を区別しないクエリのために、ここを参照してください:あなたはQオブジェクトを組み合わせることreduce操作を使用することができますDjango query case-insensitive list match

+2

。 – solarissmoke

+0

あなたは正しいです。更新された回答。 – TeaPow

+0

@TeaPowまだ同じではありません。あなたのクエリでは、値はリスト内の文字列の1つでなければならず、OPはその中の1つだけを含む値を必要とします。 – schwobaseggl

2

ソリューション:OPが探している `icontains`クエリと同じではありません

from functools import reduce 
import operator 
options = ['1', '2', '3', '4'] 

# uses operator or to combine the Q objects with the particular option filter 
query = reduce(operator.or_, (Q(value__icontains=option) for option in options)) 

polls = Poll.objects.get(query) 
関連する問題