Können wirDjango: Können wir .exclude() auf .get() in django querysets
MyClass.objects.get(description='hi').exclude(status='unknown')
Können wirDjango: Können wir .exclude() auf .get() in django querysets
MyClass.objects.get(description='hi').exclude(status='unknown')
Ihr Code funktioniert wie erwartet, wenn Sie tun das exclude()
vor dem get()
:
MyClass.objects.exclude(status='unknown').get(description='hi')
Wie @Burhan Khalid weist darauf hin, der Aufruf an .get
wird nur gelingen, wenn die resultierende Abfrage genau eine Zeile zurückgibt.
könnten Sie auch die Q
object verwenden Sie die Filter direkt im .get
zu erhalten angeben:
MyClass.objects.get(Q(description='hi') & ~Q(status='unknown'))
Beachten Sie, dass das Q-Objekt nur dann erforderlich ist, weil Sie ein verwenden .exclude
(und ORM Djangos keinen nicht gleich Feldsuche, so müssen Sie .exclude
verwenden).
Wenn Ihr Original-Code gewesen war (beachten Sie, dass .exclude
mit .filter
ersetzt wurde):
MyClass.objects.filter(status='unknown').get(description='hi')
... Sie konnte einfach tun:
MyClass.objects.get(status='unknown', description='hi')
verwenden möchten Sie stattdessen:
MyClass.objects.filter(description='hi').exclude(status='unknown')
.get()
erhöhen wird MultipleObjectsReturned
, wenn Ihre Abfrage-Ergebnisse in mehr als ein passender Satz; was wahrscheinlich passieren wird, wenn man nach etwas sucht, das kein Primärschlüssel ist.
Filter verwenden gibt Ihnen einen QuerySet, die Sie später Kette mit anderen Methoden oder einfach durch Schritt, um die Ergebnisse zu bekommen.
Dank es funktionierte :) –