Sie könnten dies tun:
Name.objects.exclude(alias__isnull=True)
Wenn Sie Nullwerte ausschließen müssen und leere Zeichenketten, ist die bevorzugte Methode, dies zu tun, die Bedingungen wie folgt zu verketten:
Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')
Die Verkettung dieser Methoden prüft im Grunde jede Bedingung unabhängig: Im obigen Beispiel schließen wir Zeilen aus, in denen alias
ist entweder null ou eine leere Zeichenkette, so dass Sie alle Name
Objekte, die ein nicht-null, nicht-leer alias
Bereich. Das generierte SQL würde etwa so aussehen:
SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""
Sie können auch mehrere Argumente an einen einzigen Aufruf von exclude
die sicherstellen würde, dass nur Objekte, die die jede Bedingung ausgeschlossen werden:
Name.objects.exclude(some_field=True, other_field=True)
Hier werden Zeilen, in denen some_field
und other_field
wahr sind, werden ausgeschlossen, so dass wir alle Zeilen erhalten, in denen beide Felder nicht wahr sind. Der generierte SQL-Code würde in etwa so aussehen:
SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)
Wenn Ihre Logik komplexer ist, können Sie alternativ auch Djangos Q Objekte :
from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))
Für weitere Informationen siehe diese Seite y diese Seite in den Django-Dokumenten.
Nebenbei bemerkt: Meine SQL-Beispiele sind nur eine Analogie - der tatsächlich generierte SQL-Code wird wahrscheinlich anders aussehen. Sie werden ein tieferes Verständnis dafür bekommen, wie Django-Abfragen funktionieren, wenn Sie sich den generierten SQL-Code ansehen.