2015-03-11 1 views
0

Привет Я новичок в Django. Я пытаюсь реализовать такую ​​функцию поиска.Запрос с использованием объектов Q

query_results = Shops.objects.filter\ 
          (Q(shop_name__icontains=search_text)\ 
          |Q(state__state_name__icontains=search_text)\ 
          |Q(city__city_name__icontains=search_text)).distinct() 

Я хотел бы искать Shops на основе shop_name, state_name и city_name. Государственные и городские поля являются иностранными ключами. Для некоторых 'Shops' state и city - null. Однако shop_name содержит search_text. Поэтому я не получаю эти «Shops», выполнив этот запрос. Любая помощь по этому поводу оценивается.

+0

пожалуйста, вы можете разместить свое определение модели? – abidibo

ответ

0

Я подозреваю, что когда вы используете отношения state__state_name10 и city__city_name, Django делает INNER JOIN для этих таблиц. Внутреннее соединение удаляет магазин без существующего отношения из результата.

В качестве временного решения для этой проблемы, вы можете попробовать что-то вроде этого:

states = State.objects.filter(state_name__icontains=search_text) 
cities = City.objects.filter(city_name__icontains=search_text) 
query_results = Shops.objects.filter(Q(shop_name__icontains=search_text) 
            |Q(state__in=states) 
            |Q(city__in=cities)).distinct()