Come fare un filtro inferiore o uguale a Queryset Django?


175

Sto tentando di filtrare gli utenti in base a un campo personalizzato in ciascun profilo utente chiamato profilo. Questo campo è chiamato livello ed è un numero intero compreso tra 0-3.

Se filtro usando uguale a, ottengo un elenco di utenti con il livello scelto come previsto:

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

Quando provo a filtrare usando meno di:

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

Ottengo l'errore:

il nome globale 'userprofile__level' non è definito

C'è un modo per filtrare per <o>, o sto abbaiando sull'albero sbagliato.


2
@ BéresBotond Anche se i documenti sembrano grandi - la struttura e il layout sono così scadenti che senza un collegamento diretto, sono
quasi

@ BéresBotond Purtroppo quel link ora è morto :(
dKen,

Risposte:


338

Inferiore o uguale:

User.objects.filter(userprofile__level__lte=0)

Maggiore o uguale:

User.objects.filter(userprofile__level__gte=0)

Allo stesso modo, ltper meno di e gtper maggiore di. Puoi trovarli tutti nella documentazione .


2
Wow, è stato veloce :). Funziona alla grande con meno o uguale, ma che ne dici di meno? (userprofile__level__lt = 3) non sembra funzionare
Finglish

1
Lo fa; ma in ogni caso, puoi anche escludere (__ gte) invece del filtro (__ lt).
Lakshman Prasad,

2
E NON dimenticare che ci sono due __sottolineature
andilab

Sto ottenendo questo errore -> {FieldError} Ricerca "livello" non supportata per AutoField o join sul campo non consentiti.
Aravind R Pillai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.