2010-02-25 486 views
6

我必须作出一个查询,将得到包含“wd2”子字符串或不包含“wd”字符串的记录。有没有什么办法可以很好地做到这一点?Django查询:如何使包含OR not_contains查询

似乎是这样的:

Record.objects.filter(Q(parameter__icontains="wd2") | Q(## what should be here? ##))

回答

13

从Django的q object documentation

您可以用Q对象与&并结合构成的任意复杂的报表|运算符并使用括号分组。此外,Q对象可以使用〜经营者被否定,允许合并查找,结合双方正常的查询和否定(NOT)查询:

Q(question__startswith='Who') | ~Q(pub_date__year=2005) 

因此,我建议

Record.objects.filter(Q(parameter__icontains="wd2") | ~Q(parameter__icontains="wd")) 
+0

哇,不知道〜操作员。非常感谢你! – DataGreed 2010-02-25 15:28:25

+1

难道不是优雅吗?我喜欢在更高层次的组合范例中重用低级逻辑思想! – 2010-02-26 15:57:07