¿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?

Finglish
fuente
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
Enlace de trabajo para doc: docs.djangoproject.com/en/1.11/ref/models/querysets/#gt
Gaurav Pandey

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 .

Lakshman Prasad
fuente
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