2009-11-28 3 views
7

J'ai la requête de filtre suivant qui est en train de faire une instruction SQL ou:Comment traiter « None » valeurs DB dans Django requêtes

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

Cela fonctionne bien, mais si les valeurs de prefs.address1 et prefs.address2 (qui viennent d'un autre modèle) sont vides dans mySQL, Django se plaint avec l'erreur suivante:

Cannot use None as a query value

y at-il une façon élégante de vérifier si mes valeurs de filtre ne sont pas vides avant la construction de la requête OR filtre?

Merci beaucoup.

Répondre

10

Vous pouvez faire ce qui est facilement généralisable à plus de requêtes

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

oh c'est encore plus agréable. Je vous remercie. – givp

3

Ceci?

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

préfet. Je vous remercie. désolé pour la question n00b :) – givp

Questions connexes