2010-02-25 33 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