Как реализовать поиск по полному имени, имея два раздельных поля в базе (first_name, last_name)?

Здравствуйте?

Как канонично релизовать поиск.
Есть поисковый запрос (заренее неизвестно что будет вбито)
Есть два поля first_name, last_name
Есть пользователь вводит ИМЯ ФАМИЛИЯ, в текущий реализиции ничего не будет найден, т.к. в занчение ИМЯ лежит в firt_name, значение ФАМИЛИЯ лежит в last_name.

Корректно ли поисковый запрос разбить по пробелам и искать результаты для каждого слова или есть какая-то более "прямая" реализциия для DJANGO?
  • Вопрос задан
  • 441 просмотр
Решения вопроса 1
@javedimka
Хочу сока
from django.db.models import Q 

def find_user_by_name(query_name):
   qs = User.objects.all()
   for term in query_name.split():
     qs = qs.filter( Q(first_name__icontains = term) | Q(last_name__icontains = term))
   return qs

stackoverflow.com/questions/9009635/django-queryse...

Q objects

Но вообще, если еще не поздно, я бы сделал одно поле full_name, first_name и last_name получал бы через методы модели, а поиск через icontains и проблем бы не было.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Dr_Elvis
@Dr_Elvis
В гугле забанен
Не знаю как для джанго, но для sql запрос я бы сделал так(нужно разбить через пробел):
SELECT * FROM table
WHERE last_name = 'ФАМИЛИЯ' AND firt_name= 'ИМЯ'

или так(не нужно разбивать через пробел):
SELECT * FROM table
WHERE concat(last_name, ' ', firt_name) = 'ФАМИЛИЯ ИМЯ'

а еще лучше привести к одному регистру, чтобы не выдало пустой список если где то не совпадает регистр:
SELECT * FROM table
WHERE lower(concat(last_name, ' ', firt_name)) = lower('ФАМИЛИЯ ИМЯ')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы