2013-12-10 23 views
7

Ho un campo in un oggetto dati che può essere nullo o impostato su un numero intero. Voglio, dato un intero, per filtrare tutti gli oggetti con quel valore OR nessuna intero:Django - filtro per "valore determinato o Nessuno"

MyElements.objects.all().filter(value__in=[myInt, None]) 

Tuttavia, questa linea non funziona per elementi con valore nullo. Più precisamente:

MyElements.objects.all().filter(value__in=[None]) 

non restituisce nulla. mentre

MyElements.objects.all().filter(value = None) 

restituisce gli elementi con valore null.

Come posso riscrivere correttamente la query originale (che riguarda myInt)?

risposta

7

È possibile utilizzare Q values che consentono di combinare più clausole nel set di query Django.

Il tuo set di query sarebbe qualcosa di simile:

from django.db.models import Q 
MyElements.objects.all().filter(Q(value=None) | Q(value=myInt)) 
+0

Grazie a tutti e due, io non conoscevo valori di Q fino ad ora. –

4

Si può provare istruzione OR:

from django.db.models import Q 
MyElements.objects.filter(Q(value__isnull=True) | Q(value=myInt)) 

django documentation