Как сделать фильтр наборов запросов с двумя или более списками? - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу сделать фильтр с двумя или более списками для моей модели

Например: я пытаюсь сделать это так

from django.db.models import Q

rq = ['a', 'b', 'c', 'd', 'e'...]

transact = Transact.objects.filter( Q(request__in=rq) | Q(area__in=rq))

Но это не работаетпросто возьмите второй вариант, в данном случае это area

что-то в этом роде, но со списками

Transact.objects.filter(Q(request='c')| Q(area='d'))

Есть идеи?

1 Ответ

0 голосов
/ 03 декабря 2018

Q эквивалентно OR на языке SQL.Если вы хотите найти значение пересечения request__in=rq и area__in=rq, вам следует использовать обычный механизм фильтрации, который эквивалентен предложению AND.

rq = ['a', 'b', 'c', 'd', 'e'...]

transact = Transact.objects.filter(request__in=rq,area__in=rq)

РЕДАКТИРОВАТЬ: Вместоиспользуя Q (потому что это не решение для того, что вы спрашиваете), вы можете использовать этот подход:

rq = ['a', 'b', 'c', 'd', 'e'...]
result = Transact.objects.filter(request__iregex=r'(' + '|'.join(rq) + ')', area__iregex=r'(' + '|'.join(rq) + ')')
...