2012-04-06 4 views
91

Ich versuche, Benutzer nach einem benutzerdefinierten Feld in jedem Benutzerprofil namens Profil zu filtern. Dieses Feld heißt level und ist eine ganze Zahl zwischen 0-3.Wie wird ein Django-Queryset kleiner oder gleich gefiltert?

Wenn ich mit equals filtern, erhalte ich eine Liste der Benutzer mit dem gewählten Niveau wie erwartet:

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

Wenn ich versuche, mit zu filtern weniger als:

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

erhalte ich die Fehler :

global name 'userprofile__level' is not defined

gibt es durch < oder> Filter entfernt, oder bin ich den Holzweg.

+3

Haben Sie versucht, die - ausgezeichnete - Dokumentation anzusehen, um zu sehen, wie die Filtersyntax in Django aussieht? https://docs.djangoproject.com/en/1.4/ref/models/querysets/#gt –

+1

@ BéresBotond Obwohl die Dokumente gut aussehen - die Strukturierung und Layout ist so schlecht, dass ohne eine direkte Verbindung, sie sind alle aber nutzlos – RunLoop

+0

@ BéresBotond Leider ist dieser Link jetzt tot :( – dKen

Antwort

172

weniger als oder gleich:

User.objects.filter(userprofile__level__lte=0) 

Größer als oder gleich:

User.objects.filter(userprofile__level__gte=0) 

Ebenso lt für weniger als und gt für mehr als. Sie können sie alle in the documentation finden.

+2

Wow, das war schnell :). Das 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

+0

Warum sollte es nicht. Es tut. –

+1

Es tut; aber in jedem Fall können Sie auch ausschließen (__ gte) statt filtern (__ lt). –