✅ Django ORM 필드 룩업 완전 정복: nickname__icontains vs tags__tag 차이 이해하기

2025. 5. 16. 15:24·기술블로그-Django편

✅ Django ORM 필드 룩업 완전 정복: nickname__icontains vs tags__tag 차이 이해하기


1. 🎯 왜 헷갈릴까?

둘 다 이렇게 생겼습니다:

nickname__icontains='cha'
tags__tag='news'
  • 문법 구조는 동일 (필드__옵션, 필드__필드)
  • 하지만 하나는 단순 필드 조건, 다른 하나는 관계 모델을 타고 들어가는 조건

그래서 모양은 같지만 의미는 전혀 다릅니다.


2. 🧠 핵심 차이 요약

항목 nickname__icontains tags__tag

시작 단어 nickname tags
의미 현재 모델의 필드 관계 모델(Tag)을 따라감
필드 타입 CharField ManyToManyField
조건 처리 문자열 안에 포함 여부 연결된 태그 객체 중 조건 일치 여부

3. 🔍 각각의 예시와 의미

✅ 1) nickname__icontains='cha'

User.objects.filter(nickname__icontains='cha')
  • User 모델 안의 nickname 필드에 'cha'가 포함된 사람 찾기
  • 대소문자 구분 없이 부분 문자열 검색

예: 'chanyeol', 'Chaerin', 'matcha' 등도 모두 포함됨

➡️ 단순 문자열 필드에서 필터 조건 적용


✅ 2) tags__tag='news'

Post.objects.filter(tags__tag='news')
  • Post 모델이 ManyToMany로 연결한 Tag 모델 중
  • tag='news'인 태그가 하나라도 연결된 Post만 필터링

➡️ 관계(Relation)를 따라가서 조건 적용


4. 🧱 ERD(관계도) 시각화

User
 └── nickname: CharField

Post
 └── title: CharField
 └── tags: ManyToManyField → Tag

Tag
 └── tag: CharField
  • User: 닉네임을 가진 사용자
  • Post: 여러 Tag와 연결됨 (N:N 관계)
  • Tag: 태그 이름을 가진 객체

➡ tags__tag는 Post → Tag 연결을 따라가서 조건을 거는 방식입니다.


5. 💡 Django ORM 룩업 방식 정리

유형 문법 예시 설명

필드 자체 조건 nickname__icontains='cha' 현재 모델의 필드에 대한 조건 처리
관계 모델 조건 tags__tag='news' 관계를 타고 들어가서 조건 처리 (JOIN 개념)

6. 📌 비유로 이해하기

표현 비유

nickname__icontains='cha' 이 사람의 "이름표"(nickname)에 'cha'가 들어 있나요?
tags__tag='news' 이 사람이 붙이고 있는 "스티커들" 중 'news'라는 게 있나요?

✅ 마무리 요약

  • __는 필드 조건뿐 아니라 관계를 따라가는 도구로도 쓰입니다.
  • 첫 단어가 "일반 필드"냐 "관계 필드"냐에 따라 완전히 다른 동작을 합니다.
  • ERD와 구조를 먼저 이해하면 훨씬 쉽게 구분할 수 있어요!

필요하시면 이걸 SQL 쿼리로 비교하거나, 템플릿에서 사용하는 방식도 추가해드릴게요 😊

'기술블로그-Django편' 카테고리의 다른 글

📌 Django-summernote - WYSIWYG 에디터 통합 가이드  (0) 2025.05.16
📌 Django ImageField 완전 정리 - 이미지 업로드 기능 구현 가이드  (0) 2025.05.16
✅ Django 검색 뷰 함수 완전 분석: search() 함수 흐름 이해하기  (0) 2025.05.16
✅ Django symmetrical 옵션 완전 이해하기  (0) 2025.05.16
✅ Django QuerySet의 논리 평가와 get_context_data 코드 완전 이해하기  (0) 2025.05.16
'기술블로그-Django편' 카테고리의 다른 글
  • 📌 Django-summernote - WYSIWYG 에디터 통합 가이드
  • 📌 Django ImageField 완전 정리 - 이미지 업로드 기능 구현 가이드
  • ✅ Django 검색 뷰 함수 완전 분석: search() 함수 흐름 이해하기
  • ✅ Django symmetrical 옵션 완전 이해하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (800) N
      • Python (32)
      • 프로젝트 (115) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    americaparty
    hotcoffeecase
    titaniumcase
    뷔
    btsjungkook
    life reflection
    remittance
    btsdischarge
    self-growth
    newpoliticalparty
    americanlaw
    chinanightlife
    btscomeback
    homebartrend
    youngprofessionals
    RM
    chatgpterror
    bts
    college reunions
    smartphonedurability
    basalcellcarcinoma
    trumpmuskclash
    global politics
    classaction
    btsreunion
    lawsuitculture
    gpterror
    urbantrends
    livebroadcast
    travel ban
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
✅ Django ORM 필드 룩업 완전 정복: nickname__icontains vs tags__tag 차이 이해하기
상단으로

티스토리툴바