2017-02-21 11 views
0

У меня возникла проблема с поиском объектов Q, тогда как при поиске пользователем нескольких терминов поиск ничего не возвращает, если все члены не находятся в одном объекте.Объединение объектов Django Q в один фильтр

Если вы идете на https://www.soledadmemorial.com/plaques и ищите David S Hackley, поиск не возвращает ничего, но если вы ищете только David S, вы получите результат.

Я попытался объединить фильтр, как (Q(first_name__icontains=query), Q(last_name__icontains=query)), но только получить ошибку. Ниже мой текущий код. Это работает без объединения поисковых запросов с несколькими объектами.

... 
if query: 
    queryset_list = queryset_list.filter(
    Q(first_name__icontains=query) | 
    Q(last_name__icontains=query) | 
    Q(branch__icontains=query) | 
    Q(rank__icontains=query) | 
    Q(group__group_name__icontains=query) | 
    Q(veteran__name__icontains=query) 
).distinct() 
... 
+0

Я не понимаю, как вы имеете в виду объединить поиск из нескольких объектов –

+0

Что запрос на самом деле порожденная Django, и что вы ожидаете? – spectras

ответ

2

icontains переводится в базу данных, как

ILIKE '%query_text%' 

Когда вы ищете Давида S находит его как first_name.

Вы не имеющие

ILIKE '%David S Hackley%' 

как любой из ваших колонок в базе данных, так icontains обыкновение делать это здесь.

Вы должны рассмотреть возможность использования SearchVector (Postgres) или даже haystack

+0

Спасибо. Я проголосовал за это, потому что вы объяснили, что происходит, вместо того, чтобы просто предлагать ссылку на другой метод. –

+0

Отредактировано для небольшого исправления, поскольку оно является значком, оно использует ILIKE – iklinac

Смежные вопросы