Immer falsches Q-Objekt

8

Wie geht man in Django ORM vor, um ein Q-Objekt zu erstellen, das immer falsch ist?

Das ist ähnlich der Frage nach immer True Q-Objekten , aber umgekehrt.

Beachten Sie, dass dies nicht funktioniert:

%Vor%

Warum möchte ich ein Q-Objekt anstelle des einfachen False-Werts? Damit ich es mit anderen Q-Werten kombinieren kann, so zum Beispiel:

%Vor%     
Flimm 09.03.2016, 14:08
quelle

3 Antworten

9

Was ist mit:

%Vor%

oder

%Vor%

Es scheint hacky, aber es scheint zu funktionieren. Zum Beispiel:

%Vor%

Beachten Sie jedoch, dass es nicht so funktioniert, wie Sie es erwarten würden, wenn Sie mit einem leeren Q() OR verknüpft wurden.

%Vor%

Die Lösung könnte darin bestehen, Q(pk__isnull=False) als 'immer wahres Q' zu verwenden.

%Vor%     
Alasdair 09.03.2016, 14:24
quelle
5

Ich habe gerade Q(pk__in=[]) verwendet, um dieses Idiom darzustellen.

Fühlt sich ein bisschen weniger hacky an und könnte dem Optimierer des DBMS ein bisschen mehr geben, um damit zu arbeiten.

    
Sam Mason 17.08.2016 15:51
quelle
4

Ich habe nicht genug Reputation, um Kommentare abzugeben, aber Sam Masons Antwort ( Q(pk__in=[]) ) hat den Vorteil, dass sie nicht einmal eine Datenbankabfrage durchführt, wenn sie alleine verwendet wird. Django (v1.10) scheint schlau genug zu sein, um zu erkennen, dass die Bedingung unerfüllbar ist, und gibt ein leeres Abfrage-Set zurück, ohne die Datenbank zu fragen.

%Vor%     
fwip 14.09.2017 17:24
quelle

Tags und Links