장고(Django) - Field lookup
Field lookup
- SQL의 WHERE에 해당되는 기능
- filter, get, exclude 메소드로 얻게 되는 Queryset을 조건에 맞게 제한
- 어떤 lookup type에도 해당이 안 될 경우(Example.objects.get(id=1)) 자동적으로 exact로 적용
- 사용법은 fieldname__lookuptype (Example.objects.get(id__exact=1)
- lookup의 종류는 꽤 많으니 Django documentation를 참고하시면 됩니다.
개인적으로 자주 쓰는 lookup type을 몇개만 기술하자면
__exact : 정확히 일치
__contains : 포함하는지
__gt : 큼
__gte : 크거나 같음
__lt : 작음
__lte : 작거나 같음
__startwith : 시작하는지
__endwith : 끝나는지
SQL 쿼리문과 비교해봅시다.
Field lookup SQL Query
Example.objects.get(id__exact=1) | SELECT ... WHERE id = 1;
Example.objects.get(id__contains='Lookup') | SELECT ... WHERE test LIKE '%Lookup%';
Example.objects.get(id__gt=1) | SELECT ... WHERE id > 1;
Example.objects.get(id__gte=1) | SELECT ... WHERE id >= 1;
Example.objects.get(id__lt=1) | SELECT ... WHERE id < 1;
Example.objects.get(id__lte=1) | SELECT ... WHERE id <= 1;
Example.objects.get(id__startwith='Lookup') | SELECT ... WHERE test LIKE 'Lookup%';
Example.objects.get(id__endwith='Lookup') | SELECT ... WHERE test LIKE '%Lookup';
* exact나 contains같은 몇몇 lookup type은 앞에 i를 붙여서 사용하기도 하는데 여기서 i는 case insensitive, 즉 대소문자를 구별하지 않음을 의미합니다.