如何在Django过滤器中使用AND?

时间:2009-04-20 19:55:11

标签: python django

如何创建一个“AND”过滤器来检索Django中的对象?例如,我想在一个字段中检索一个包含两个单词组合的行。

例如,当我在mysql数据库上运行时,以下SQL查询完全正确:

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

如何使用过滤器在Django中实现这一目标?

3 个答案:

答案 0 :(得分:80)

为了彻底起见,我们只提一下Q对象方法:

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

请注意,这里的其他答案更简单,更适合您的用例,但如果有任何类似但稍微复杂的问题(例如需要“不”或“或”)看到这一点,那么最好有参考就在这里。

答案 1 :(得分:77)

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

更新:很长一段时间以来我写了这个答案并完成了一些django,但我相信这一天最好的方法是使用像David Berger这样的Q对象方法:{{3 }}

答案 2 :(得分:8)

你可以在Django中链接过滤表达式:

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

您可以在“Chaining Filters”的Django文档中找到更多信息。