🧠 DRF와 Form 방식의 코드 생성 흐름 차이 - 왜 staticmethod를 써야 하고, commit=False를 쓰는가?

2025. 5. 20. 00:07·기술블로그-Django편
목차
  1. 🧠 DRF와 Form 방식의 코드 생성 흐름 차이 - 왜 staticmethod를 써야 하고, commit=False를 쓰는가?
  2. ✅ 1. DRF에서는 왜 @staticmethod를 써야 하나?
  3. 📌 이유:
  4. 🔍 정리
  5. ✅ 2. Form에서는 왜 commit=False를 쓰는가?
  6. 📌 이유:
  7. 🔍 정리
  8. 🔄 DRF vs Form 비교 정리
  9. 💬 결론 요약

🧠 DRF와 Form 방식의 코드 생성 흐름 차이 - 왜 staticmethod를 써야 하고, commit=False를 쓰는가?

Django 개발을 하다 보면 URL 생성기 같은 로직에서 아래와 같은 두 가지 방식의 차이를 보게 됩니다:

  • DRF에서는 serializer.save(code=code)로 code를 전달
  • Form에서는 form.save(commit=False) 후 code를 삽입하고 .save()

이 차이의 구조적 이유와 왜 staticmethod를 써야 하는지, 정리해봅니다.


✅ 1. DRF에서는 왜 @staticmethod를 써야 하나?

code = ShortURL.generate_code_two()
short_url = serializer.save(code=code)

📌 이유:

  • DRF에서 .save(code=...)를 호출할 때는 아직 인스턴스가 생성되지 않은 상태입니다.
  • 따라서 generate_code_two() 같은 메서드를 인스턴스를 생성하지 않고 호출해야 합니다.
  • 이럴 때 필요한 것이 @staticmethod

🔍 정리

  • @staticmethod를 붙이면 ShortURL.generate_code_two()처럼 클래스명.메서드() 형태로 호출 가능
  • 인스턴스 없이 실행해야 하는 상황에서 매우 유용

✅ 2. Form에서는 왜 commit=False를 쓰는가?

short_url = form.save(commit=False)
short_url.generate_code()
short_url.save()

📌 이유:

  • Form에서는 .save() 시 바로 DB에 저장되기 때문에, 중간에 값을 조작하려면 저장을 미뤄야 함
  • commit=False를 쓰면 인스턴스만 만들고 저장은 하지 않음
  • 이 인스턴스를 이용해 generate_code() 같은 메서드 호출 가능

🔍 정리

  • Form에서는 인스턴스를 먼저 만든 후, 그 인스턴스에 값을 추가하고 .save()로 최종 저장하는 흐름
  • 이는 generate_code()가 인스턴스 내부 필드에 접근해야 할 수도 있기 때문

🔄 DRF vs Form 비교 정리

항목 DRF 방식 Form 방식

코드 생성 방식 .save(code=code)로 전달 commit=False로 인스턴스 생성 후 호출
메서드 형태 @staticmethod 필요 인스턴스 메서드 (self) 사용 가능
인스턴스 접근 생성 전 → 접근 불가 생성 후 → 접근 가능
저장 시점 .save() 시점에 DB 저장 .save(commit=False) → 조작 후 저장

💬 결론 요약

  • DRF는 구조상 생성자에서 값을 외부에서 주입받는 방식을 택하므로, @staticmethod를 써야 하고 create() 내부에서 처리하게 된다.
  • Form은 인스턴스를 먼저 만들고 필요한 값을 채운 뒤 저장하는 방식을 택하므로 commit=False를 활용한다.

따라서 같은 "code 생성 후 저장"이라는 목적이지만,
사용하는 방식은 프레임워크의 동작 구조에 따라 달라지는 것입니다. ✅

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

📌 Django ORM 완전 정복: 정참조, 역참조, select_related, prefetch_related, __문법 총정리  (0) 2025.05.27
🧩 Django 댓글 API 흐름 완전 정복  (0) 2025.05.21
🧪 Django shell로 클래스/메서드 유효성 확인하는 방법 총정리  (0) 2025.05.19
🔐 Django에서 make_random_password() 오류 해결기 (Django 5.x 대응)  (0) 2025.05.19
📘 Django에서 as_view()가 필요한 이유 - FBV vs CBV 완전 정리  (0) 2025.05.19
  1. 🧠 DRF와 Form 방식의 코드 생성 흐름 차이 - 왜 staticmethod를 써야 하고, commit=False를 쓰는가?
  2. ✅ 1. DRF에서는 왜 @staticmethod를 써야 하나?
  3. 📌 이유:
  4. 🔍 정리
  5. ✅ 2. Form에서는 왜 commit=False를 쓰는가?
  6. 📌 이유:
  7. 🔍 정리
  8. 🔄 DRF vs Form 비교 정리
  9. 💬 결론 요약
'기술블로그-Django편' 카테고리의 다른 글
  • 📌 Django ORM 완전 정복: 정참조, 역참조, select_related, prefetch_related, __문법 총정리
  • 🧩 Django 댓글 API 흐름 완전 정복
  • 🧪 Django shell로 클래스/메서드 유효성 확인하는 방법 총정리
  • 🔐 Django에서 make_random_password() 오류 해결기 (Django 5.x 대응)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
찬스맨의 프로그래밍 스토리안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (794) N
      • Python (32)
      • 프로젝트 (113)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154) N
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🧠 DRF와 Form 방식의 코드 생성 흐름 차이 - 왜 staticmethod를 써야 하고, commit=False를 쓰는가?

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.