Django 프론트& 백엔드 개발

ModelForm이란?

Data Jun 2026. 1. 11. 10:21

Django의 ModelForm은 Model을 기반으로 HTML Form을 자동 생성해주는 클래스입니다.

Form 필드를 직접 하나씩 정의하지 않아도 Model 구조를 그대로 활용하여

입력 검증 + DB 저장까지 한 번에 처리할 수 있습니다.

 

1. PostForm 코드 구조 해설

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

 

1️⃣  class PostForm(forms.ModelForm)

  • forms.Form이 아닌 forms.ModelForm을 상속
  • 이 순간부터 Model 기반 Form이 됩니다.

2️⃣ class Meta

  • ModelForm에서 가장 중요한 내부 클래스
  • “이 Form은 어떤 Model을 기준으로 만들어질 것인가?”를 정의

3️⃣ model = Post

  • Post 모델을 기준으로 Form 생성

4️⃣ fields = ['title', 'content']

  • Form으로 노출할 필드만 선택
  • 모든 필드를 쓰고 싶다면:
fields = '__all__'

ModelForm은 Model 구조를 그대로 재사용하면서 Form 생성 + 검증 + 저장 로직을 획기적으로 단순화한다.

 

2. View에서 ModelForm이 실제로 동작하는 방식

from django.shortcuts import render, redirect
from .models import Post
from .forms import PostForm

def post_create(request):
    if request.method == 'POST':
        # model_form은 Form과 Model을 함께 사용함.
        post_form = PostForm(request.POST)
        new_post = post_form.save()

        return redirect('post-detail', post_id=new_post.id) # urlname을 통한 redirect.
    else:
        post_form = PostForm()
        return render(request, 'posts/post_form.html', {'form': post_form})

 

1️⃣ POST 요청이 들어왔을 때

if request.method == 'POST':
    post_form = PostForm(request.POST)
    new_post = post_form.save()
  • 사용자가 입력한 데이터 (request.POST)를 PostForm 객체에 바인딩
  • 이 시점에서 입력값 검증, Model 필드 타입 체크 길이, null 여부 등 자동 검증 수행
  • post_form은 “아직 저장되지 않은, 검증 가능한 Form 객체”
  • new_post: DB에 저장된 Post 인스턴스

new_post.id를 바로 사용할 수 있는 이유도 이미 DB에 저장된 실제 객체이기 때문입니다

 

3. 정리하면

ModelForm은 “Form + Model + Validation + Save”를
하나의 객체로 묶어주는 Django의 핵심 생산성 도구이다.