🔍 Django ORM Field Lookups 완벽 정리
🔗 공식 문서: Django Field Lookups
✅ Field Lookup 이란?
Django ORM에서 .filter(), .exclude() 등과 함께 사용되어 모델 필드에 조건을 부여하는 방법입니다.
✅ 문법 구조:
Model.objects.filter(필드명__lookup=값)
예:
Book.objects.filter(title__icontains="python")
→ title 필드에 "python"이 포함된 모든 Book 객체를 조회
📌 자주 사용하는 Lookups 정리
Lookup 표현 의미 예시
exact | 정확히 일치 | name__exact="Alice" |
iexact | 대소문자 무시 정확 일치 | name__iexact="alice" |
contains | 포함 | title__contains="Python" |
icontains | 대소문자 무시 포함 | title__icontains="python" |
in | 리스트 내 포함 여부 | id__in=[1, 3, 5] |
gt | 보다 큼 (>) | price__gt=10000 |
gte | 크거나 같음 (>=) | price__gte=10000 |
lt | 보다 작음 (<) | price__lt=5000 |
lte | 작거나 같음 (<=) | price__lte=5000 |
startswith | 시작 문자열 | name__startswith="Lee" |
istartswith | 대소문자 무시 시작 | name__istartswith="lee" |
endswith | 끝 문자열 | name__endswith="Kim" |
iendswith | 대소문자 무시 끝 | name__iendswith="kim" |
range | 범위 검색 | date__range=(start, end) |
isnull | NULL 여부 | email__isnull=True |
regex | 정규표현식 매칭 | phone__regex=r'^010' |
🧪 실전 예제 모음
# 제목에 'python' 포함 (대소문자 구분 없이)
Book.objects.filter(title__icontains='python')
# 가격이 1만 원 이상인 상품
Product.objects.filter(price__gte=10000)
# 특정 날짜 범위에 생성된 게시글
Post.objects.filter(created_at__range=['2024-01-01', '2024-12-31'])
# last_login 필드가 NULL인 유저
User.objects.filter(last_login__isnull=True)
# 이름이 'Kim'으로 끝나는 유저
User.objects.filter(name__iendswith="kim")
🧠 실무 팁
- icontains, in, range, isnull은 실무에서 매우 자주 사용됨
- __(더블 언더스코어)를 기준으로 lookup 표현식을 구성함
- 복합 조건은 .filter(Q(...)) 와 함께 &, | 연산자로 조합 가능
예:
from django.db.models import Q
User.objects.filter(Q(name__icontains="kim") | Q(email__icontains="gmail.com"))
✅ 마무리 요약
상황 추천 Lookup
문자열 검색 | contains, icontains |
숫자 비교 | gt, gte, lt, lte |
범위 | range |
null 여부 확인 | isnull |
시작/끝 문자열 | startswith, endswith |
리스트 포함 | in |
정확하고 다양한 조건을 조합해 Django ORM의 강력한 필터링 기능을 100% 활용해 보세요! ✅
'기술블로그-Django편' 카테고리의 다른 글
🧱 Django Database Model 완전 정복 (0) | 2025.05.14 |
---|---|
💻 Django 프로젝트 세팅 완전 정복! (0) | 2025.05.14 |
🔍 Django ORM: get() vs filter() 차이점 완벽 정리 (0) | 2025.05.14 |
🔧 Django에서 HTML 폼으로 DELETE 요청 처리하기 — Middleware 활용법 (0) | 2025.05.14 |
🔄 Django에서 access_count += 1 vs F("access_count") + 1 완전 비교 (0) | 2025.05.14 |