Вам нужно Q объектов , а также вам нужно разделить ваш запрос на отдельные термины (поскольку ни одно имя не будет соответствовать полной строке «Имя Фамилия»).
Вот идея сопоставить любое имя или фамилию, начинающиеся с «Имя» или «Фамилия» в поиске «Имя Фамилия».
Это общий поиск - настройте запрос в соответствии со своими потребностями!
Редактировать: упс, мне действительно не нравится использовать redu, так как это выглядит сбивающим с толку, но их необходимо объединить в единое ИЛИ, и мы не можем сделать более подробную версию, потому что число терминов неизвестно.
import operator
from django.db.models import Q
search_args = []
for term in request.GET['query_term'].split():
for query in ('first_name__istartswith', 'last_name__istartswith'):
search_args.append(Q(**{query: term}))
all_soggs = Entity.objects.filter(reduce(operator.or_, search_args))
Чтобы уточнить, как использовать объекты Q, при заданном поиске «Имя, Фамилия» предыдущий запрос равен:
Entity.objects.filter(
Q(first_name__istartswith="Firstname") | Q(last_name__istartswith="Firstname") |
Q(first_name__istartswith="Lastname") | Q(last_name__istartswith="Lastname")
)