Моя поисковая функция получает поисковый запрос любым из следующих способов:
- имя "Томас"
- фамилия "кузнец"
- имя, фамилия, фамилия "Томас Смит"
Я пытаюсь создать набор запросов, который найдет клиент "Томас" по любому из этих терминов, но сузит результаты до "Томас Смит" вместо "Томас Джонс" или "Джордж Смит", если оба имени поставляются.
Я провел много исследований о том, как использовать фильтры, объекты Q, разбиение строк и циклы для достижения этой цели, но пока что не повезло.
MODEL:
class Client(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
VIEW:
def search(request):
query = request.GET.get('s', '').strip()
if query:
client_set = (
(Q(first_name__in=query) & Q(last_name__in=query)) |
Q(first_name__icontains=query) |
Q(last_name__icontains=query)
)
else:
client_list = []
return render_to_response("search.html", {
"client_list": client_list,
"query": query
},context_instance=RequestContext(request))
Приведенный выше код работает при поиске "thom", но ничего не находит для "thomas smith". Как я могу переписать это, чтобы функционировать, как описано?