Я пишу простой поиск для нашего сайта, и мне нужно отфильтровать записи по ряду критериев.Однако, если строгая фильтрация не выполняется, я хочу вернуть результаты для менее строгого поиска.Для этого я хочу создать несколько объектов запроса, каждый из которых будет иметь еще один фильтр, затем итерировать их в обратном порядке, пытаясь получить результат, и вернуть первый, полученный таким образом.
Что я делаю, это:
q0 = MyIndex.objects.in_city(city_id)
q1 = q0.filter(name_contains(words))
где
def name_contains(words):
if not words:
return Q()
query = Q(words_contains=words[0])
for word in word[1:]:
query = query | Q(words_contains=word)
Когда я передаю слова, которых нет в базе данных, я все равно получаю результат,потому что часть запроса, возвращаемая name_contains
, присоединяется через OR
, а не AND
.
Есть ли способ вернуть этот запрос, чтобы он всегда был присоединен к остальной части запроса с помощьюAND