2010-09-26 4 views
9

Dans Django, comment demander deux valeurs différentes, comme dans ce qui suit?Requête Django utilisant la condition OU

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

Répondre

10

Q-class de Commander django:

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

De plus pour améliorer votre codage style, jetez un oeil à certains coding guidelines, vous devriez mieux nommer votre classe de modèle PSetting. Etes-vous sûr de ne saisir qu'un seul objet?

+0

Je suis d'accord sur le style - regardez aussi PEP8 de Python (http://www.python.org/dev/peps/pep-0008/) pour le guide de style. – bx2

3

Il y a un objet Q() pour cette tâche - regardez ici: Complex Queries with Q() object

Dans l'exemple:

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

Si vous essayez d'attraper un queryset d'un tas d'objets, tout ce que vous devez faire est de filtres Enchaînez:

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

Cependant, puisque tout mais SETTING_VALUE est le même, vous pouvez regarder simplement une liste ou tuple:

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

(suggestion de alexdb ci-dessus est très bien si et seulement si vous êtes sûr que vous allez recevoir un seul objet en tant que réponse à votre requête)

0

Pour ce type de requête, consultez cette documentation link

et pour votre problème spécifique, vous pouvez transmettre plusieurs objets de l'ensemble de queuesets (Q) pour l'utilisation du jeu de queues | pour la condition OR et & pour la condition AND dans les fonctions get() et filter().

Questions connexes