기술블로그-Django편

🔍 Django ORM Field Lookups 완벽 정리

Chansman 2025. 5. 14. 14:43

🔍 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% 활용해 보세요! ✅