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")
)

Вернуться на верх