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의 핵심 생산성 도구이다.
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| Django 모델에서 기본 Validator와 Custom Validator 함께 사용하기 (0) | 2026.01.11 |
|---|---|
| Model 단계에서의 유효성 검사 (1) | 2026.01.11 |
| Django Form Method POST 처리 흐름 정리 (0) | 2026.01.10 |
| Django Form으로 입력 폼 빠르게 만들기 (0) | 2026.01.10 |
| URL Name을 활용한 템플릿 태그 사용법 (0) | 2026.01.10 |