如何创建一个“AND”过滤器来检索Django中的对象?例如,我想要检索在单个字段中具有两个单词的组合的行。如何在Django过滤器中使用AND?
例如,下面的SQL查询正是这么做的,当我在MySQL数据库运行:
select * from myapp_question
where ((question like '%software%') and (question like '%java%'))
如何使用过滤器,你做到这一点在Django?
如何创建一个“AND”过滤器来检索Django中的对象?例如,我想要检索在单个字段中具有两个单词的组合的行。如何在Django过滤器中使用AND?
例如,下面的SQL查询正是这么做的,当我在MySQL数据库运行:
select * from myapp_question
where ((question like '%software%') and (question like '%java%'))
如何使用过滤器,你做到这一点在Django?
mymodel.objects.filter(first_name__icontains="Foo", first_name__icontains="Bar")
更新:因为我写了这个答案,并做了一些Django的,但我相信这天最好的办法是使用像大卫·伯格将q对象的方法很长一段时间显示在这里:stackoverflow.com/ A /63097分之770078
你可以连续过滤器表达式在Django:
q = Question.objects.filter(question__contains='software').filter(question__contains='java')
您可以在 “Chaining Filters” Django文档的详细信息。
为了彻底起见,我们只提Q
对象的方法:
from django.db.models import Q
criterion1 = Q(question__contains="software")
criterion2 = Q(question__contains="java")
q = Question.objects.filter(criterion1 & criterion2)
注意这里的其他答案更简单,更好地适应你的使用情况,但如果有人有类似,但稍微复杂的问题(如需要“不”或“或”)看到这一点,这是很好的参考权利在这里。
这对Django 1.6和Postgres来说并不适合我。每当有两个或更多相同的关键字时,我会收到“重复的SyntaxError:关键字参数”。只有David Berger提出的Q解决方案才有效。 – margusholland 2014-05-30 07:32:54
@margusholland答案适用于Django 1.6和Postgres。你能发布你的查询吗?它与Q对象方法一样正式。 https://docs.djangoproject.com/zh/dev/topics/db/queries/#spanning-multi-valued-relationships – Medorator 2014-07-08 19:15:12
我有一个短国家代码字段(cc_short)的国家: >>>国家= Country.objects.filter(cc_short__icontains ='A',cc_short__icontains ='B') 文件“”,第1行 SyntaxError:重复的关键字参数 –
margusholland
2014-07-09 08:56:10