2012-04-06 83 views
91

Estoy intentando filtrar usuarios por un campo personalizado en cada perfil de usuario llamado perfil. Este campo se llama nivel y es un número entero entre 0-3.¿Cómo hacer un filtro menor o igual que en Django queryset?

Si puedo filtrar utilizando iguales, consigo una lista de usuarios con el nivel elegido como se esperaba:

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

Cuando intenta filtrar utilizando menos de:

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

consigo el error :

global name 'userprofile__level' is not defined

¿hay distancia para filtrar por < o>, o estoy ladrando al árbol equivocado.

+3

¿Ha intentado mirar la - excelente - documentación para ver cuál es la sintaxis del filtro en Django? https://docs.djangoproject.com/en/1.4/ref/models/querysets/#gt –

+1

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

+0

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

Respuesta

172

Menos de o igual:

User.objects.filter(userprofile__level__lte=0) 

Mayor o igual:

User.objects.filter(userprofile__level__gte=0) 

Asimismo, lt por menos de y gt para mayor que. Puede encontrarlos a todos in the documentation.

+2

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

+0

¿Por qué no? Lo hace. –

+1

Lo hace; pero en cualquier caso, también puede excluir (__ gte) en lugar de filtrar (__ lt). –

Cuestiones relacionadas