Les Crash-Devs d'un Passionné

Utiliser Q dans un queryset Django

/Catégorie/django

Temps de lecture : 1 minutes

Lorsque l'on utilise un queryset dans Django les paramètres placés dans un filter (ou autre) sont des conditions AND. Si l'on souhaite mettre une condition avec un OR nous allons devoir passer par un objet spécifique à savoir Q.

Cette fonction est placée dans la librairie de Django

from django.db.models import Q

On place dans cette fonction les paramètres correspondant aux attributs de notre modèle (comme dans un filter)

Q(name__icontains="david")

Comme nous l'avons évoqué l'intérêt de Q est de pouvoir faire un OR, donc pour chaîner les conditions Q nous allons utiliser le pipe

Q(name__icontains="david") | Q(name="python")

On peut également utiliser la négation avec l'opérateur tilde

Q(name__icontains="david") | ~Q(name="python")

L'intérêt peut être de chercher une valeur dans plusieurs colonnes

req.filter(Q(first_name=value) | Q(last_name=value))

Voilà une fonction bien pratique pour manipuler les données au travers l'ORM de Django