Django filter: Как отфильтровать результаты с несколькими значениями
Я работаю над Django и мне нужно фильтровать записи, например:
table: Person
name | age |
---|---|
David Abraham Benj | 18 |
Итак, если я запускаю это, Person.objects.filter(name__icontains="David Abraham")
это работает
но если я запускаю это, Person.objects.filter(name__icontains="David Benj")
это не работает
есть идеи, как это работает?
фреймворк: Django и SQL: Postgres
Person.objects.filter(name__icontains="David Benj")
Что равно
SELECT ... WHERE name ILIKE '%David Benj%';
Значит, он не соответствует запросу. Значит, это ожидаемое поведение.
Вам необходимо использовать Q объекты для того, чтобы выстроить цепочку из нескольких операций SQL ILIKE
, что и производит оператор __icontains
в бэкграунде.
Попробуйте это:
from django.db.models import Q
Person.objects.filter(
Q(name__icontains="David") &
Q(name__icontains="Benj")
)