2009-11-28 34 views
7

我有做以下篩選查詢的SQL或聲明:如何應對「無」在Django DB值查詢

results = Stores.objects.filter(Q(title__icontains=prefs.address1) | Q(title__icontains=prefs.address2)) 

這工作正常,但如果prefs.address1和prefs.address2值(這是從另一個模型)中的MySQL是空白的,Django的抱怨,出現以下錯誤:

Cannot use None as a query value

有一種優雅的方法來檢查,看看我的過濾器值不是構造或過濾器查詢之前的空白?

非常感謝。

回答

10

你能做到這一點是很容易普遍意義更查詢

query = Q() 
for search in (prefs.address1, prefs.address2): 
    if search: 
     query |= Q(title__icontains=search) 
results = Stores.objects.filter(query) 
+0

哦,這是更好。謝謝。 – givp 2009-11-30 11:06:23

3

This?

thefilter = Q(title__icontains=prefs.address1) 
if prefs.address2 is not None: 
    thefilter = thefilter | Q(title__icontains=prefs.address2) 
results = Stores.objects.filter(thefilter) 
+0

知府。謝謝。對不起n00b的問題:) – givp 2009-11-28 20:54:57