Django 프론트& 백엔드 개발

Django ModelForm으로 Form 위젯 커스터마이징하기

Data Jun 2026. 1. 11. 15:32

Django에서 ModelForm을 사용하면
Model을 기반으로 Form을 자동 생성하는 것뿐만 아니라,
입력 필드의 UI와 동작 방식까지 함께 커스터마이징할 수 있습니다.

 

특히 Meta 클래스의 widgets 옵션을 활용하면
placeholder, CSS 클래스, 입력 타입 등을 손쉽게 설정할 수 있어
프론트엔드와 자연스럽게 연동된 Form을 만들 수 있습니다.

 

이번 글에서는 ModelForm을 기반으로 Form을 생성하고,
widgets를 이용해 입력 필드를 커스터마이징하는 방법을 간단한 예제로 정리해보겠습니다.

 

1. ModelForm 기본 구조

아래는 Post 모델을 기반으로 Form을 생성한 예제입니다.

class PostForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ['title', 'content']
  • model: 어떤 모델을 기준으로 Form을 만들지 지정
  • fields: Form에 포함할 필드만 선택

Django가 자동으로 Form 필드와 validation을 연결해줌


2. widgets로 입력 필드 UI 커스터마이징하기

Form의 입력 방식이나 스타일을 바꾸고 싶다면 Meta 클래스의 widgets 옵션을 사용합니다.

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    
    class Meta:
        # Post Model을 활용해서 Form을 만드는 Meta 클래스: Form 자동 생성
        model = Post
        fields = ['title', 'content']
        widgets = {
            'title': forms.TextInput(attrs={
                'class': 'title',
                'placeholder': '제목을 입력 하세요.'}),
            'content': forms.Textarea(attrs={
                'placeholder': '내용을 입력하세요.'})
            }

 

widgets에서 할 수 있는 것

  • HTML input 타입 지정 (TextInput, Textarea 등)
  • CSS 클래스 추가
  • placeholder 설정
  • 프론트엔드 스타일과 자연스럽게 연동

widgets을 이용하여 Form의 스타일을 적용할 수 있다.

 

3. 정리하면

ModelForm은 Model을 기반으로 Form을 자동 생성해줌

Meta 클래스에서 Form의 구조를 정의

widgets로 입력 UI를 손쉽게 커스터마이징 가능