如何在Django过滤器中使用“AND”?
我该如何在Django中创建一个“与”过滤器,以便获取对象?比如说,我想获取一行数据,这一行的某个字段里同时包含两个词。
例如,当我在mysql数据库上运行以下SQL查询时,它正好能做到这一点:
SELECT * FROM myapp_question
WHERE ((question LIKE '%software%') AND (question LIKE '%java%'))
那么在Django中,如何使用过滤器来实现这个呢?
4 个回答
18
在Django中,你可以把多个筛选条件连在一起使用:
q = Question.objects.filter(question__contains='software').filter(question__contains='java')
想了解更多信息,可以查看Django的文档,链接是“连接筛选条件”。
172
为了全面起见,我们提一下Q
对象的方法:
from django.db.models import Q
criterion1 = Q(question__contains="software")
criterion2 = Q(question__contains="java")
q = Question.objects.filter(criterion1 & criterion2)
请注意,这里其他的回答更简单,也更适合你的情况,但如果有其他人遇到类似但稍微复杂一点的问题(比如需要用到“不是”或者“或者”),那么在这里提到这个方法也是很有帮助的。
113
(更新: 这个答案现在已经不适用了,会出现语法错误 keyword argument repeated
)
mymodel.objects.filter(first_name__icontains="Foo", first_name__icontains="Bar")
更新: 自从我写这个答案以来已经过了很长时间,我也做了一些 Django 的项目,但我相信到现在为止,最好的方法是使用 Q 对象的方法,就像 David Berger 在这里展示的那样: 我该如何在 Django 过滤器中使用 AND?