Comment faire un filtre inférieur ou égal à dans le jeu de requêtes Django?


176

J'essaie de filtrer les utilisateurs par un champ personnalisé dans chaque profil d'utilisateurs appelé profil. Ce champ est appelé niveau et est un entier compris entre 0 et 3.

Si je filtre en utilisant des égaux, j'obtiens une liste d'utilisateurs avec le niveau choisi comme prévu:

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

Lorsque j'essaye de filtrer en utilisant moins de:

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

J'obtiens l'erreur:

le nom global 'userprofile__level' n'est pas défini

Existe-t-il un moyen de filtrer par <ou>, ou est-ce que j'aboie dans le mauvais arbre.


2
@ BéresBotond Bien que les documents aient fière allure - la structuration et la mise en page sont si médiocres que sans lien direct, elles sont presque inutiles
RunLoop

@ BéresBotond Malheureusement, ce lien est maintenant mort :(
dKen

Réponses:


338

Inférieur ou égal:

User.objects.filter(userprofile__level__lte=0)

Meilleur que ou égal:

User.objects.filter(userprofile__level__gte=0)

De même, ltpour moins de et gtpour plus de. Vous pouvez tous les trouver dans la documentation .


2
Wow, c'était rapide :). Cela fonctionne très bien pour un prix inférieur ou égal, mais que diriez-vous d'un peu moins que? (userprofile__level__lt = 3) ne semble pas fonctionner
Finglish

1
Cela fait; mais dans tous les cas, vous pouvez également faire exclure (__ gte) au lieu de filter (__ lt).
Lakshman Prasad

2
Et n'oubliez pas qu'il y a deux __soulignements
andilabs

Je reçois cette erreur -> {FieldError} Recherche non prise en charge «niveau» pour AutoField ou rejoindre sur le champ non autorisé.
Aravind R Pillai
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.