2009-11-28 14 views
7

Tengo la siguiente consulta de filtro, que está haciendo un SQL o declaración:¿Cómo lidiar con "Ninguno" valores de DB en Django consulta

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

Esto funciona bien, pero si los valores prefs.address1 y prefs.address2 (que provienen de otro modelo) están en blanco en mySQL, Django se queja con el siguiente error:

Cannot use None as a query value

¿hay una manera elegante de comprobar para ver si mis valores de filtro no están en blanco antes de construir la consulta de filtro O?

Muchas gracias.

Respuesta

10

usted puede hacer esto que es fácilmente generalizable a más consultas

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

oh, esto es aún mejor. gracias. – givp

3

Esto?

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

prefecto. gracias. lo siento por la pregunta n00b :) – givp

Cuestiones relacionadas