2013-06-07 5 views
4

Я хочу, чтобы запросить мою модель Django с фильтром, как это:Сложные фильтры в Django модели

(pseudo code) 
field1values = ['val11','val12'] 
field2values = ['val21','val22'] 
result = (field1 == 'val11' | field1 == 'val12') & (field2 == 'val21' | field2 == 'val22') 

Если бы я должен был запросить только field1 здесь код может выглядеть следующим образом:

clauses = [] 
    for item in field1values: 
     clauses.append(MyModel.objects.filter(field1=item)) 
     result = reduce(lambda x, y: x | y, clauses) 

Но я не могу понять, как создать фильтры для комплексного предиката, который я хочу

ответ

5

Q objects.

resultquery = (Q(field1='val11') | Q(field1='val12')) & ... 
result = SomeModel.objects.filter(resultquery) 

Также in.

+0

Спасибо за быстрый ответ. Можно ли переписать это, если значения поступают из списка. Я не знаю, что значения в списке так не могут жестко закодировать их –

+0

в порядке, упомянутый вами пункт IN хорошо зарекомендовал себя для списков. result = MyModel.objects.filter (filed1__in = field1values). А затем result = result.filter (filed2__in = field2values). благодаря –

Смежные вопросы