2014-06-13 8 views
5

Sto provando a filtrare gli oggetti nel mio database usando .filter(field__lte = parameter) tuttavia restituisce TUTTI gli oggetti e non ne filtra nessuno. Ho persino impostato il parametro su molto al di sopra di qualsiasi valore memorizzato nel database e tutti gli oggetti sono ancora restituiti.Filtro queryset Django GT, LT, GTE, LTE restituisce l'elenco completo degli oggetti

>> 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 

Il campo del database che sto interrogazione di contro è un IntegerField.

Sto facendo qualcosa di sbagliato qui? Grazie per l'aiuto.

+0

Forse tutti gli oggetti punteggio <= 100. Sei sicuro che non ci sono oggetti il ​​cui punteggio è> 100? –

+0

Prova a fare 'score__lte = 10' e vedi se ottieni lo stesso risultato. Mi sembra bello - max è 100, e mi porta tutto uguale o uguale a 100 – karthikr

+2

Django ORM interpreta la condizione fornita a '' filter'' non come _ "filtra questi" _, ma piuttosto come _ "lascia questi passano attraverso "_. –

risposta

6

Stai dicendo che The max possible score is 100. Usando score__lte=100, si stanno filtrando tutti gli oggetti con scoreminore o uguale a 100 - che è ogni oggetto nella tabella secondo la propria definizione.

6

Come hai detto il punteggio massimo possibile è 100 quindi restituirà sempre tutti gli oggetti poiché lte significa restituire tutti gli oggetti il ​​cui punteggio è minore o uguale a 100. Potrebbe essere necessario lt ricerca che significa semplicemente tornare quegli oggetti il ​​cui punteggio è inferiore a 100:

filtered = all_objects.filter(score__lt=100) 
Problemi correlati