979 Stimmen

Wie tue ich ein nicht gleich in Django Queryset Filterung?

In Django Modell QuerySets, ich sehe, dass es eine __gt y __lt für Vergleichswerte, aber gibt es eine __ne o != ( nicht gleich )? Ich möchte mit einem "nicht gleich" herausfiltern. Zum Beispiel, für

Model:
    bool a;
    int x;

Ich möchte Folgendes tun

results = Model.objects.exclude(a=True, x!=5)

El != ist keine korrekte Syntax. Ich habe auch versucht __ne .

Ich habe es schließlich benutzt:

results = Model.objects.exclude(a=True, x__lt=5).exclude(a=True, x__gt=5)

8voto

Gerard Punkte 114

Gesucht werden alle Objekte, die entweder a=false o x=5 . In Django, | dient als OR Operator zwischen Querysets:

results = Model.objects.filter(a=false)|Model.objects.filter(x=5)

8voto

A. Coady Punkte 49113

django-model-values (Offenlegung: Autor) bietet eine Implementierung des NotEqual Nachschlagen, wie in diese Antwort . Es bietet auch syntaktische Unterstützung für sie:

from model_values import F
Model.objects.exclude(F.x != 5, a=True)

8voto

Yusuf Ganiyu Punkte 145

Dies sollte funktionieren

results = Model.objects.filter(x=5).exclude(a=True)

7voto

M. Dasn Punkte 133
results = Model.objects.filter(a = True).exclude(x = 5)Generetes dieses sql:    select \* from tablex where a != 0 and x !=5Die Sql hängt davon ab, wie Ihr True/False-Feld dargestellt wird, und von der Datenbank-Engine. Der Django-Code ist alles, was Sie brauchen, aber.

5voto

Jason Baker Punkte 180981

Der letzte Teil des Codes schließt alle Objekte aus, bei denen x!=5 und a Wahr ist. Versuchen Sie dies:

results = Model.objects.filter(a=False, x=5)

Denken Sie daran, dass das =-Zeichen in der obigen Zeile dem Parameter a den Wert "False" und dem Parameter x die Zahl 5 zuweist und nicht die Gleichheit prüft. Daher gibt es eigentlich keine Möglichkeit, das Symbol != in einem Abfrageaufruf zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X