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.


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

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 .


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 (
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.