2014-06-13 9 views
5

Ich versuche, Objekte in meiner Datenbank mit .filter(field__lte = parameter) zu filtern, aber es gibt nur alle Objekte zurück und filtert keine aus. Ich habe den Parameter sogar weit über jeden Wert gesetzt, der in der Datenbank gespeichert ist, und alle Objekte werden noch zurückgegeben.Django Queryset-Filter GT, LT, GTE, LTE gibt vollständige Objektliste zurück

>> all_objects = Ranked.objects.all() 
>> filtered = all_objects.filter(score__lte = 100) #The max possible score is 100 
>> len(filtered) 
87 #Every object in the db 

Das Feld in der Datenbank, die ich gegen bin Abfrage ist ein IntegerField.

Mache ich hier etwas falsch? Danke für Ihre Hilfe.

+0

Vielleicht sind alle Objekte Tor gegangen <= 100. Sind Sie sicher, dass es Objekte sind, deren Score> 100? –

+0

Versuchen Sie 'score__lte = 10' und sehen Sie, ob Sie das gleiche Ergebnis erhalten. Es sieht gut aus für mich - Max ist 100, und bekomme ich alles kleiner als oder gleich 100 – karthikr

+2

Django ORM interpretiert die Bedingung, die Sie liefern "Filter" nicht als "filter diese weg" _, sondern eher als _ "lassen diese gehen durch "_. –

Antwort

6

Sie sagen das The max possible score is 100. Mit score__lte=100 filtern Sie alle Objekte mit scorekleiner als oder gleich 100 - das ist jedes Objekt in der Tabelle nach Ihrer eigenen Definition.

6

Wie Sie sagten, ist die maximal mögliche Punktzahl 100, so dass es immer alle Objekte zurückgibt, da lte alle Objekte zurückgibt, deren Ergebnis kleiner oder gleich 100 ist. Sie könnten lt Lookup müssen die Mittel nur jene Objekte zurück, deren Partitur weniger als 100:

filtered = all_objects.filter(score__lt=100) 
Verwandte Themen