Подтвердить что ты не робот

Как использовать AND в Django-фильтре?

Как создать фильтр "AND" для извлечения объектов в Django? например, я хотел бы получить строку, которая имеет комбинацию из двух слов в одном поле.

Например, следующий SQL-запрос выполняет именно это, когда я запускаю его в базе данных mysql:

select * from myapp_question
where ((question like '%software%') and (question like '%java%'))

Как вы это делаете в Django с помощью фильтров?

4b9b3361

Ответ 1

(обновление: этот ответ больше не будет работать и keyword argument repeated синтаксической ошибки)

mymodel.objects.filter(first_name__icontains="Foo", first_name__icontains="Bar")

Обновление: долгое время с тех пор, как я написал этот ответ и выполнил несколько django, но я уверен, что до сих пор лучшим подходом является использование метода объекта Q, как показано здесь Дэвидом Бергером: Как использовать AND в фильтре Django?

Ответ 2

Для удобства, позвольте просто упомянуть метод Q:

from django.db.models import Q
criterion1 = Q(question__contains="software")
criterion2 = Q(question__contains="java")
q = Question.objects.filter(criterion1 & criterion2)

Обратите внимание, что другие ответы здесь проще и лучше адаптированы для вашего варианта использования, но если кто-то с подобной, но немного более сложной проблемой (например, необходимость "не" или "или" ) видит это, хорошо иметь ссылку прямо здесь.

Ответ 3

Вы можете связать выражения фильтра в Django:

q = Question.objects.filter(question__contains='software').filter(question__contains='java')

Дополнительную информацию в документах Django можно найти в разделе Chaining Filters.