여러 개의 값이 있는 리스트를 필터에 넣어 검색하고 싶었습니다.

User.objects.filter(first_name__contains=['x','y','z'])

또한 최대한 간결한 코드로 작성하기 위해 검색해보니 다음과 같은 문서를 찾을 수 있었습니다.

Django: Query using contains each value in a list

import operator
from functools import reduce

from django.db.models import Q

User.objects.filter(reduce(operator.and_, (Q(first_name__contains=x) for x in ['x', 'y', 'z'])))
  • 우선 Comprehension을 사용해 Q객체를 만듭니다.
  • reduce를 사용해 Q객체와 and_ 연산자를 누적합니다.
  • 쿼리 필터에 위의 연산결과를 적용합니다.