Django QuerySet in
Django ‘in’
in은 해당 내용이 포함된 값을 filter로 찾아낼 때 주로 사용된다. 입력 값의 형태는 순서형 자료(리스트, 튜플, 쿼리셋)를 사용할 수 있다. 또한 문자열도 입력 가능하지만, 자주 사용되지는 않는다.
Topic.objects.filter(id__in=[1, 5]) #아이디 1, 5인 데이터를 추출
Topic.objects.filter(name__in="sers") #name에 "sers"가 포함된 데이터를 모두 추출
쿼리셋을 입력값으로 주는 경우
inner_qs = User.objects.filter(name__cotains="Kyle") #먼저 찾으려는 쿼리셋 추출
topics =Topic.objects.filter(user__in=inner_qs) #해당 쿼리셋을 저장한 변수를 입력
찾으려는 QuarySet을 value() 또는 values_list()로 한번더 데이터를 정리한 뒤 입력값으로 줄 경우에는 필 드의 값은 하나의 필드값만 추출해줘야한다.
inner_qs = User.objects.filter(name__cotains="Kyle").values('id', 'name') #잘못된 방법.
inner_qs = User.objects.filter(name__cotains="Kyle").values('name') #하나의 필드로만 추출해올 것
topics =Topic.objects.filter(user__in=inner_qs)