Wie mache ich einen Filter kleiner oder gleich in Django Queryset?

175

Ich versuche, Benutzer nach einem benutzerdefinierten Feld in jedem Benutzerprofil zu filtern, das als Profil bezeichnet wird. Dieses Feld heißt level und ist eine Ganzzahl zwischen 0-3.

Wenn ich mit Gleichheit filtere, erhalte ich erwartungsgemäß eine Liste der Benutzer mit der ausgewählten Stufe:

user_list = User.objects.filter(userprofile__level = 0)

Wenn ich versuche, mit weniger als zu filtern:

user_list = User.objects.filter(userprofile__level < 3)

Ich bekomme den Fehler:

Der globale Name 'userprofile__level' ist nicht definiert

Gibt es eine Möglichkeit, nach <oder> zu filtern, oder belle ich den falschen Baum an?

Finglish
quelle
2
@ BéresBotond Obwohl die Dokumente großartig aussehen - die Strukturierung und das Layout sind so schlecht, dass sie ohne direkten Link alles andere als nutzlos sind
RunLoop
@ BéresBotond Leider ist dieser Link jetzt tot :(
dKen
Arbeitslink für doc: docs.djangoproject.com/de/1.11/ref/models/querysets/#gt
Gaurav Pandey

Antworten:

336

Weniger als oder gleich:

User.objects.filter(userprofile__level__lte=0)

Größer als oder gleich:

User.objects.filter(userprofile__level__gte=0)

Ebenso ltfür weniger als und gtfür mehr als. Sie finden sie alle in der Dokumentation .

Lakshman Prasad
quelle
2
Wow, das war schnell :). Dies funktioniert gut für weniger als oder gleich, aber wie wäre es mit weniger als? (userprofile__level__lt = 3) scheint nicht zu funktionieren
Finglish
1
Es tut; In jedem Fall können Sie jedoch auch (__ gte) anstelle von filter (__ lt) ausschließen.
Lakshman Prasad
2
Und vergessen Sie nicht, dass es zwei __Unterstreichungen gibt
andilabs
Ich erhalte diesen Fehler -> {FieldError} Nicht unterstützte Suchstufe für AutoField oder Join auf dem Feld nicht zulässig.
Aravind R Pillai