¿Cómo hacer un filtro menor o igual que en el conjunto de consultas de Django?


175

Estoy intentando filtrar usuarios por un campo personalizado en cada perfil de usuarios llamado perfil. Este campo se llama nivel y es un número entero entre 0-3.

Si filtro usando iguales, obtengo una lista de usuarios con el nivel elegido como se esperaba:

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

Cuando trato de filtrar usando menos de:

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

Me sale el error:

el nombre global 'userprofile__level' no está definido

¿Hay alguna forma de filtrar por <o>, o estoy ladrando por el árbol equivocado?


2
@ BéresBotond Aunque los documentos se ven geniales, la estructura y el diseño son tan pobres que sin un enlace directo, son casi inútiles
RunLoop

@ BéresBotond Desafortunadamente ese enlace ahora está muerto :(
dKen

Respuestas:


338

Menor o igual:

User.objects.filter(userprofile__level__lte=0)

Mayor que o igual:

User.objects.filter(userprofile__level__gte=0)

Asimismo, ltpara menor que y gtpara mayor que. Puede encontrarlos todos en la documentación .


2
Wow, eso fue rápido :). Esto funciona muy bien por menos que o igual, pero ¿qué tal solo menos que? (userprofile__level__lt = 3) no parece funcionar
Finglish

1
Lo hace; pero en cualquier caso, también puede excluir (__ gte) en lugar de filtro (__ lt).
Lakshman Prasad

2
Y NO olvide que hay dos __subrayados
andilabs

Recibo este error -> {FieldError} 'Nivel' de búsqueda no admitido para AutoField o unirse en el campo no permitido.
Aravind R Pillai
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.