📌 Django ModelForm의 instance= 사용법 완전 정리

2025. 5. 7. 15:18·기술블로그-Django편
목차
  1. 📌 Django ModelForm의 instance= 사용법 완전 정리
  2. ✅ 1. instance=란 무엇인가?
  3. 🔧 2. 사용 예시: 수정폼에서 자주 사용됨
  4. ✨ Blog 모델 예시
  5. ✏️ 3. 수정 뷰에서의 코드 흐름
  6. 🧩 4. 시각적 이해
  7. 🔍 5. instance= 없을 때와 비교
  8. 💡 6. commit=False와 함께 사용하기
  9. ✅ 7. 요약

📌 Django ModelForm의 instance= 사용법 완전 정리


✅ 1. instance=란 무엇인가?

Django의 ModelForm에서 instance=는 기존 모델 객체를 폼에 연결할 때 사용됩니다.

  • 해당 객체의 데이터를 폼에 미리 채워주고,
  • 사용자가 수정한 값을 다시 그 객체에 저장할 수 있게 해줍니다.

🔧 2. 사용 예시: 수정폼에서 자주 사용됨

✨ Blog 모델 예시

# models.py
from django.db import models
from django.contrib.auth.models import User

class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

✏️ 3. 수정 뷰에서의 코드 흐름

# views.py
from django.shortcuts import get_object_or_404, redirect, render
from .forms import BlogForm
from .models import Blog

@login_required
def blog_update(request, pk):
    blog = get_object_or_404(Blog, pk=pk)  # 수정할 기존 객체 가져오기
    form = BlogForm(request.POST or None, instance=blog)  # 기존 객체를 폼에 연결

    if form.is_valid():
        form.save()  # blog 객체의 내용이 수정됨
        return redirect('blog_detail', pk=blog.pk)

    return render(request, 'blog_update.html', {'form': form})

🧩 4. 시각적 이해

기존 Blog 객체 (id=5)
  ├─ title: "기존 제목"
  └─ content: "기존 내용"

↓ 폼에 instance=blog 로 전달 ↓

BlogForm(instance=blog)
  → 폼 입력창에 "기존 제목", "기존 내용"이 자동으로 입력됨

↓ 사용자가 수정하고 저장 ↓

form.save()  → 기존 blog 객체가 수정됨 (새 객체 아님!)

🔍 5. instance= 없을 때와 비교

상황 코드 동작

새 글 작성 BlogForm(request.POST) 새로운 Blog 객체 생성
기존 글 수정 BlogForm(request.POST, instance=blog) 해당 blog 객체 업데이트

💡 6. commit=False와 함께 사용하기

form = BlogForm(request.POST, instance=blog)
blog = form.save(commit=False)
blog.author = request.user  # 예: 작성자 수동 지정
blog.save()
  • commit=False는 DB에 저장을 잠시 보류하고 객체를 먼저 반환합니다.
  • 이후 수동으로 추가 처리한 뒤 .save()로 최종 저장합니다.

✅ 7. 요약

요소 역할

instance=객체 기존 데이터를 폼에 채우고 수정 가능하게 함
폼 제출 시 해당 객체가 수정되어 저장됨 (update)
사용 위치 수정 뷰, 작성자 정보 추가 처리 등
장점 수정/재사용 시 코드 간결화 및 실수 방지

instance=는 Django에서 폼을 통해 데이터를 수정할 때 필수적으로 사용되는 매개변수입니다.
데이터를 수정하고 저장할 일이 많다면 꼭 익숙해져야 할 기능입니다! 😉

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

📌 Django bulk_create() 완전 정리 - 대량 객체 저장할 때 쓰는 방법  (0) 2025.05.07
📌 Django render()와 context 완전 정리 + 템플릿 활용 예시  (0) 2025.05.07
📌 Django {% url %} 태그 완전 가이드 - URL 생성의 모든 것  (0) 2025.05.07
📌 Django reverse() 호출부터 뷰 실행까지 전체 실행 흐름  (0) 2025.05.07
📌 Django에서 request.GET.get('next') 완전 정리  (0) 2025.05.07
  1. 📌 Django ModelForm의 instance= 사용법 완전 정리
  2. ✅ 1. instance=란 무엇인가?
  3. 🔧 2. 사용 예시: 수정폼에서 자주 사용됨
  4. ✨ Blog 모델 예시
  5. ✏️ 3. 수정 뷰에서의 코드 흐름
  6. 🧩 4. 시각적 이해
  7. 🔍 5. instance= 없을 때와 비교
  8. 💡 6. commit=False와 함께 사용하기
  9. ✅ 7. 요약
'기술블로그-Django편' 카테고리의 다른 글
  • 📌 Django bulk_create() 완전 정리 - 대량 객체 저장할 때 쓰는 방법
  • 📌 Django render()와 context 완전 정리 + 템플릿 활용 예시
  • 📌 Django {% url %} 태그 완전 가이드 - URL 생성의 모든 것
  • 📌 Django reverse() 호출부터 뷰 실행까지 전체 실행 흐름
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django ModelForm의 instance= 사용법 완전 정리

개인정보

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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