2013-12-10 5 views
7

Ich habe ein Feld in einem Datenobjekt, das entweder Null oder auf eine ganze Zahl festgelegt werden kann. Ich will, eine ganze Zahl angegeben, alle Objekte mit diesem Integer-Wert zu filtern oder none:Django - Filterung durch "bestimmten Wert oder keine"

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

jedoch diese Linie nicht für Elemente mit Nullwert nicht funktioniert. Genauer gesagt:

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

gibt nichts zurück. Wobei

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

die nullwertigen Elemente zurückgibt.

Wie kann ich die ursprüngliche Abfrage (die myInt beinhaltet) korrekt umschreiben?

Antwort

7

Sie Q values verwenden können, die Ihnen erlauben, mehrere Klauseln in Django querysets zu kombinieren.

Ihre Anfrage Satz wäre so etwas wie:

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

Dank euch beiden, ich bis jetzt nicht über Q-Werte nicht kannte. –

4

können Sie versuchen, OR-Anweisung:

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

django documentation

Verwandte Themen