web-dev-qa-db-fra.com

Django filtre de requête GT, LT, GTE, LTE renvoie la liste complète des objets)

J'essaie de filtrer les objets de ma base de données à l'aide de .filter(field__lte = parameter) mais il ne renvoie que TOUS les objets et n'en filtre aucun. J'ai même réglé le paramètre bien au-dessus de toute valeur stockée dans la base de données et tous les objets sont toujours retournés.

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

Le champ de la base de données sur lequel je recherche est un IntegerField.

Est-ce que je fais quelque chose de mal ici? Merci de votre aide.

12
apardes

Comme vous l'avez dit, le score maximum possible est de 100 donc il retournera toujours tous les objets car lte signifie retourner tous les objets dont le score est soit inférieur ou égal à 100. Vous devrez peut-être rechercher lt, ce qui signifie simplement renvoyer les objets dont le score est inférieur à 100:

filtered = all_objects.filter(score__lt=100)
9
Aamir Adnan

Vous dites que The max possible score is 100. En utilisant score__lte=100, vous filtrez tous les objets avec scoreinférieur ou égal à 100 - qui est chaque objet du tableau selon votre propre définition.

6
alecxe