📂 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 |