2010-09-26 23 views
9

In Django, come si esegue una query per ottenere due valori diversi, come nel seguito?Query di Django utilizzando la condizione OR

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

risposta

10

Checkout di Django Q-class:

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

Inoltre per migliorare il vostro codice stile, dai un'occhiata a coding guidelines, è necessario nominare meglio la classe del modello PSetting.

+0

Sono d'accordo sullo stile - guarda anche Python's PEP8 (http://www.python.org/dev/peps/pep-0008/) per la guida allo stile. – bx2

3

C'è un oggetto Q() per questo compito - guarda qui: Complex Queries with Q() object

Nell'esempio:

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

Sei sicuro di prendere solo un oggetto?

Se si sta tentando di afferrare un set di query di un gruppo di oggetti, tutto quello che dovete fare è filtri a catena insieme:

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

Tuttavia, dal momento che tutto ma SETTING_VALUE è lo stesso, si può semplicemente cercare i una lista o tupla:

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

(suggerimento di alexdb sopra va bene se e solo se si è certi che sarai sempre un solo oggetto come una risposta alla tua richiesta)

0

Per questo tipo di query consultare questa documentazione link

e per il problema specifico è possibile passare più oggetti di queryset (Q) per uso queryset | per condizione OR e & per condizione AND in entrambe le funzioni get() e filter().

Problemi correlati