📌 Django CreateView에서 form.save(commit=False)와 self.object 완전 해부

2025. 5. 9. 17:34·기술블로그-Django편

📌 Django CreateView에서 form.save(commit=False)와 self.object 완전 해부


✅ 질문 요약

사용자는 다음과 같은 질문을 가짐:

self.object = form.save(commit=False) 이 코드에서
self.object에는 form이 들어가는 건가요?


🔍 설명에 사용된 코드

class CommentCreateView(LoginRequiredMixin, CreateView):
    model = Comment
    form_class = CommentForm

    def get(self, *args, **kwargs):
        raise Http404

    def form_valid(self, form):
        blog = self.get_blog()
        self.object = form.save(commit=False)
        self.object.author = self.request.user
        self.object.blog = blog
        self.object.save()

✅ 한 줄 요약 정답

self.object에는 form 그 자체가 아니라, form을 통해 만들어진 Comment 모델 인스턴스가 들어간다!


1️⃣ 코드 라인별 해석

🔸 self.object = form.save(commit=False)

  • form은 CommentForm이라는 ModelForm
  • .save(commit=False)는 실제 DB 저장 없이 모델 객체만 반환함
  • 즉, 이 시점의 self.object는 아직 저장되지 않은 Comment 객체

예시:

<Comment: content='멋진 글입니다!', author=None, blog=None>

🔸 self.object.author = self.request.user

  • 현재 로그인한 유저를 댓글 작성자로 지정

🔸 self.object.blog = blog

  • 댓글이 달릴 대상 블로그 글을 지정 (ex: /blog/3/이라면 ID 3인 Blog)

🔸 self.object.save()

  • 지금까지 설정한 Comment 객체를 DB에 실제로 저장함

2️⃣ 전체 흐름 요약표

단계 설명 결과

form.save(commit=False) 모델 인스턴스 생성, 아직 저장 X self.object에 저장됨
self.object.author = ... 작성자 지정 값 채움
self.object.blog = ... 대상 블로그 지정 값 채움
self.object.save() DB에 최종 저장 완료 🎉

✅ 진짜 핵심 포인트 요약

  • form.save()는 폼을 기반으로 모델 인스턴스를 생성함
  • commit=False는 임시 객체만 만들고 저장은 나중에 하겠다는 뜻
  • self.object는 그 임시 객체를 담아두는 변수
  • 이후 .author, .blog 등을 수동으로 채우고 .save()하면 저장 완료!

💬 결론 한 줄

self.object = form.save(commit=False)는 단순한 줄이 아니라,
"폼으로부터 모델 인스턴스를 얻고, 내가 직접 필요한 값들을 넣고, 나중에 저장하는" 실무에서 자주 쓰이는 핵심 패턴이다.


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

🛠 Django CBV - NoReverseMatch 오류 디버깅 사례 정리  (0) 2025.05.11
✅ PyCharm에서 Django URL, static 경로 오류가 날 때 확인할 것!  (0) 2025.05.09
📌 Django에서 prefetch_related 완전 정복하기 (쿼리 최소화)  (0) 2025.05.09
📌 Django CBV에서 self.object, context['object'] 완전 정복하기  (0) 2025.05.09
📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복 version 2  (0) 2025.05.09
'기술블로그-Django편' 카테고리의 다른 글
  • 🛠 Django CBV - NoReverseMatch 오류 디버깅 사례 정리
  • ✅ PyCharm에서 Django URL, static 경로 오류가 날 때 확인할 것!
  • 📌 Django에서 prefetch_related 완전 정복하기 (쿼리 최소화)
  • 📌 Django CBV에서 self.object, context['object'] 완전 정복하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (734) N
      • Python (32)
      • 프로젝트 (58) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14) N
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django CreateView에서 form.save(commit=False)와 self.object 완전 해부
상단으로

티스토리툴바