KyleXID

몬스터코딩

Django QuerySet in

2019-05-23 KyleXIDDjango

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)