📂 Django 모델에서 str() 함수 작동 흐름 완벽 해설

2025. 5. 14. 16:39·기술블로그-Django편

📂 Django 모델에서 str() 함수 작동 흐름 완벽 해설

Django 프로젝트에서 __str__() 메서드는 객체를 문자열로 어떻게 표현할지를 결정합니다. 이는 admin 페이지, 쉘 출력, 디버깅에서 객체를 더 명확하게 식별할 수 있도록 도와주는 중요한 메서드입니다.


프로젝트 개요

  • 사용자 정보를 담는 User 모델
  • 사용자 글을 나타내는 Post 모델
  • 글에 첨부된 이미지를 관리하는 PostImage 모델

모델 클래스 및 str 정의 예시

# member/models.py
class User:
    def __str__(self):
        return self.nickname

# post/models.py
class Post(TimestampModel):
    content = models.TextField('본문')
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return f'[{self.user}] post'

class PostImage(TimestampModel):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    image = models.ImageField('이미지', upload_to='post/%Y/%m/%d')

    def __str__(self):
        return f'{self.post} image'

str() 호출 흐름 예시

모델 객체 반환 문자열 호출 흐름

User 상빈이 self.nickname
Post [상빈이] post f'[{self.user}] post' → User.__str__()
PostImage [상빈이] post image f'{self.post} image' → Post.__str__() → User.__str__()

예시 데이터 생성 및 출력 결과

user = User.objects.create(nickname="상빈이")
post = Post.objects.create(user=user, content="오늘의 일기")
image = PostImage.objects.create(post=post, image='example.jpg')

print(user)   # 상빈이
print(post)   # [상빈이] post
print(image)  # [상빈이] post image

💡 실무 팁

  • __str__()을 잘 정의해두면 admin 페이지나 디버깅 시 객체를 직관적으로 확인할 수 있어 편리합니다.
  • 정의하지 않으면 Post object (1)처럼 출력되어 관리하기 불편합니다.
  • 너무 많은 연쇄 참조를 하면 성능 저하가 발생할 수 있으므로 주의가 필요합니다.

✅ 마무리

  • __str__() 메서드는 모델 객체가 어떻게 보일지를 결정하는 중요한 요소입니다.
  • 연결된 객체가 있을 경우, 그 객체의 __str__()이 함께 호출되어 최종 문자열이 구성됩니다.

다음 단계로는 admin.py 파일에서 list_display, search_fields 등과 함께 __str__() 활용 방법을 이어서 학습해보세요!

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

📂 Django에서 MEDIA_URL과 MEDIA_ROOT 설정 완벽 이해하기  (0) 2025.05.14
✅ Django에서 User 모델을 참조하는 두 가지 방식 비교  (0) 2025.05.14
📬 Django 이메일 전송 및 보안 서명 처리  (0) 2025.05.14
🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리  (0) 2025.05.14
👤 Django 사용자 인증 시스템 완전 정리  (0) 2025.05.14
'기술블로그-Django편' 카테고리의 다른 글
  • 📂 Django에서 MEDIA_URL과 MEDIA_ROOT 설정 완벽 이해하기
  • ✅ Django에서 User 모델을 참조하는 두 가지 방식 비교
  • 📬 Django 이메일 전송 및 보안 서명 처리
  • 🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (798)
      • Python (32)
      • 프로젝트 (113)
      • 과제 (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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📂 Django 모델에서 str() 함수 작동 흐름 완벽 해설
상단으로

티스토리툴바