Django: использование запроса содержит каждое значение в списке Мне нужно выполнить запрос django, который проверяет, содержит ли поле все значения в списке. Список будет иметь разную длину Пример User.objects.filter(first_name__contains=['x','y','z']) Ответ 1 User.objects.filter(reduce(operator.and_, (Q(first_name__contains=x) for x in ['x', 'y', 'z'])) Ответ 2 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) Ответ 3 Еще один подход. qs = User.objects.all() for search_term in ['x', 'y', 'z']: qs = qs.filter(first_name__contains=search_term) Я не уверен, что это лучше, но это более читаемо. Ответ 4 from django.db.models import Q User.objects.filter(Q(first_name__contains=x)&Q(first_name__contains=y)&Q(first_name__contains=z)) У меня работает на Django 1.8 python 2.7 doc => https://docs.djangoproject.com/en/1.8/ref/models/querysets/#q-objects для более свежих => https://docs.djangoproject.com/en/2.1/ref/models/querysets/#q-objects
Ответ 1 User.objects.filter(reduce(operator.and_, (Q(first_name__contains=x) for x in ['x', 'y', 'z']))
Ответ 2 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)
Ответ 3 Еще один подход. qs = User.objects.all() for search_term in ['x', 'y', 'z']: qs = qs.filter(first_name__contains=search_term) Я не уверен, что это лучше, но это более читаемо.
Ответ 4 from django.db.models import Q User.objects.filter(Q(first_name__contains=x)&Q(first_name__contains=y)&Q(first_name__contains=z)) У меня работает на Django 1.8 python 2.7 doc => https://docs.djangoproject.com/en/1.8/ref/models/querysets/#q-objects для более свежих => https://docs.djangoproject.com/en/2.1/ref/models/querysets/#q-objects