2017-02-06 13 views
0

残りのオブジェクトが複数の制約(OR文)の少なくとも1つを満たすようにDjangoでQuerySetを取得する方法はありますか?以下のようなDjango QuerySet OR文

何か:

remaining = Fruits.objects.all() 

fruit_type = ['apple', 'orange'] # input from user 
for fruit in fruit_type: 
    remaining = remaining.filter(FruitType__icontains=fruit) 

ただし、上記は 'オレンジ色の' AND 'リンゴ'(というよりもオレンジやリンゴ)の両方を含むFruitTypesを返します。あなたは

from django.db.models import Q 

for fruit in fruit_type: 
    query |= Q(FruitType__icontains=fruit) 

# Query the model 
remaining = remaining.filter(query) 

複雑なクエリセットを実行するためにQオブジェクトを使用することができ

+0

チェックを行うことができ、この質問http://stackoverflow.com/questions/4824759/django-query-using-contains-each-value-in-a-list – neverwalkaloner

+0

ます。https:// docs.djangoproject.com/en/1.10/topics/db/queries/#complex-lookups-with-q-objectsこのリンクをたどる –

答えて

0

は、より多くの情報のためのドキュメントhttps://docs.djangoproject.com/en/1.10/topics/db/queries/#complex-lookups-with-qをジャンゴを参照してください。

+0

これを 'for'ループ内に統合する方法はありますか?ユーザーはfruit_typeを入力するので、長さが0から10までの可能性があります。最悪のシナリオ私は10の 'if'文を書くことができます。とにかく助けてくれてありがとう! – jfried

+0

はい、できます。私はanserを編集しました。 – thangtn

1
fruit_type = ['apple', 'orange'] 
remaining = Fruits.objects.filter(FruitType__in=fruit_type) 
0

あなたは

from django.db.models import Q 
query = Q() 
for fruit in fruit_type: 
    query |= Q(FruitType__icontains=fruit) 
remaining = remaining.filter(query) 
関連する問題