web-dev-qa-db-fra.com

Django: Query using contient chaque valeur dans une liste

Je dois exécuter une requête Django qui vérifie si un champ contient toutes les valeurs d'une liste. La liste sera de longueur variable

Exemple

User.objects.filter(first_name__contains=['x','y','z'])
38
neolaser
reduce(operator.and_, (Q(first_name__contains=x) for x in ['x', 'y', 'z']))
62
import operator
from Django.db.models import Q

q = ['x', 'y', 'z']
query = reduce(operator.and_, (Q(first_name__contains = item) for item in ['x', 'y', 'z']))
result = User.objects.filter(query)
23
user2872619

Juste une autre approche.

qs = User.objects.all()
for search_term in ['x', 'y', 'z']:
    qs = qs.filter(first_name__contains=search_term)

Je ne suis pas sûr que ce soit mieux, mais c'est plus lisible.

0
Mark Mishyn
from Django.db.models import Q
User.objects.filter(Q(first_name__contains=x)&Q(first_name__contains=y)&Q(first_name__contains=z))

Fonctionne pour moi sur Django 1.8 Python 2.7

doc => https://docs.djangoproject.com/fr/1.8/ref/models/querysets/#q-objects

pour les plus récents => https://docs.djangoproject.com/en/2.1/ref/models/querysets/#q-objects

0
Michel Dudouze