(Django) Q()를 이용한 다중 필터
Q()
Q는 장고의 model orm으로 where절에 or문을 추가하고 싶을때 사용된다 Article 데이터의 name이 article이거나 category가 category인 데이터를 필터한다
from django.db.models import Q
Article.objects.filter(Q(name = article) | Q(category = category)
위에 처럼 하는 방식보다 q=Q()로 빈 객체를 선언하고 Q안에 조건이 들어가지 않으면 All조건으로 모든 데이터가 필터될 수 있게 한다
q &= Q(필터내용)
식으로 사용하여 Q객체를 추가할 수 있다. 아래의 코드처럼 작성하게 되면 category가 category이고 price 범위가 price_from ~ price_to안에 존재하는 데이터를 가져올 수 있다
q = Q()
q &= Q(category = category)
q &= Q(price__range =(price_from, price_to))
articles = Article.objects.filter(q) # q안에 이미 필요한 조건이 전부 정의되어 있다
__ in
이때 필터해야 하는 데이터가 리스트 형태로 되어 있다면 __ in 을 사용하여 리스트안에 담긴 데이터에 해당하는 모든 값들을 찾을 수 있다
category = ['의류', '전자기기', '기타']
Product.objects.filter(id__in=category)