2009-11-28 14 views
7

Ho la seguente query di filtro, che sta facendo uno SQL istruzione OR:Come trattare con "Nessuno" valori DB in Django interroga

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

Questo funziona bene, ma se i valori prefs.address1 e prefs.address2 (che provengono da un altro modello) sono vuote in mySQL, Django si lamenta con il seguente errore:

Cannot use None as a query value

c'è un modo elegante per controllare per vedere se i miei valori di filtro non sono vuoti prima di costruire l'OR query di filtro?

Molte grazie.

risposta

10

Si potrebbe fare questo che è facilmente generalizzabile a più query

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

oh questo è ancora più bello. grazie. – givp

3

Questo?

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

prefetto. grazie. scusa per la domanda n00b :) – givp