Como fazer um filtro menor ou igual ao querieset no Django?

175

Estou tentando filtrar usuários por um campo personalizado em cada perfil de usuário chamado profile. Este campo é chamado nível e é um número inteiro entre 0 e 3.

Se eu filtrar usando iguais, recebo uma lista de usuários com o nível escolhido conforme o esperado:

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

Quando tento filtrar usando menos de:

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

Eu recebo o erro:

o nome global 'userprofile__level' não está definido

Existe uma maneira de filtrar por <ou>, ou estou latindo para a árvore errada.

Finglish
fonte
2
@ BéresBotond Embora os docs está ótimo - a estruturação e layout é tão pobre que, sem uma ligação directa, eles são todos, mas inútil
RunLoop
@ BéresBotond Infelizmente esse link agora está morto :(
dKen
Ligações de trabalho para doc: docs.djangoproject.com/en/1.11/ref/models/querysets/#gt
Gaurav Pandey

Respostas:

337

Menor ou igual:

User.objects.filter(userprofile__level__lte=0)

Maior ou igual:

User.objects.filter(userprofile__level__gte=0)

Da mesma forma, ltpor menos que e gtpor maior que. Você pode encontrá-los todos na documentação .

Lakshman Prasad
fonte
2
Uau, isso foi rápido :). Isso funciona muito bem para menos ou igual, mas e quanto menos? (userprofile__level__lt = 3) não parece trabalho
Finglish
1
Faz; mas, em qualquer caso, você também pode excluir (__ gte) em vez de filtro (__ lt).
Lakshman Prasad
2
E NÃO esqueça que existem dois __sublinhados
andilabs
Estou recebendo este erro -> {FieldError} Pesquisa 'não suportada' para AutoField ou ingresso no campo não permitido.
Aravind R Pillai (