2010-09-26 21 views
9

En Django, ¿cómo se consulta para obtener dos valores diferentes, como en el siguiente?Consulta de Django usando la condición O

profile_setting = (pSetting.objects.get(module="my_mod", setting_value=1) or 
        pSetting.objects.get(module="my_mod", setting_value=0)) 

Respuesta

10

Pedido de Django Q-class:

profile_setting = pSetting.objects.get(Q(module="my_mod"),\ 
        Q(setting_value=1)|Q(setting_value=0)) 

Además de mejorar su codificación estilo, eche un vistazo a algunos coding guidelines, debería nombrar mejor a su clase modelo PSetting.

+0

Estoy de acuerdo con el estilo; también consulte Python's PEP8 (http://www.python.org/dev/peps/pep-0008/) para ver la guía de estilo. – bx2

3

Hay un objeto Q() para esta tarea - mira aquí: Complex Queries with Q() object

En el ejemplo:

profile_setting = pSetting.objects.get(
    Q(module="my_mod", setting_value=1) | Q(module="my_mod", setting_value=0) 
) 
1
profile_setting = pSetting.objects.get(module="my_mod",setting_value__in=[0,1]) 
4

¿Estás seguro de que estás agarrando un solo objeto?

Si usted está tratando de tomar un conjunto de consultas de un montón de objetos, todo lo que necesita hacer es filtros encadenar:

profile_setting = pSetting.objects.filter(module="my_mod", setting_value__in=0) 
         .filter(module="my_mod", setting_value__in=1) 

Sin embargo, dado que todo lo que no SETTING_VALUE es el mismo, sólo tiene que buscar a una lista o tupla:

profile_setting = pSetting.objects.filter(module="my_mod", setting_value__in=[0,1]) 

(sugerencia de alexdb anterior está bien si y sólo si está seguro de que usted estará recibiendo sólo un objeto como una respuesta a su consulta)

0

Para este tipo de consulta, consulte esta documentación link

y para su problema específico puede pasar varios objetos de conjunto de consulta (Q) para consultar el uso de conjunto | para la condición O y & para la condición AND en las funciones get() y filter().

Cuestiones relacionadas