Form / ModelForm을 쓰는 이유

HY_1023·2026년 3월 19일

MENTOS

목록 보기
10/19

1편 순서기억 이해

Form / ModelForm을 쓰는 이유

나의질문 폼이랑 모델폼차이가 이해가 안되신다는건가용??

Study 모델 정의
→ ModelForm 작성
→ 폼에서 입력값 검증
→ form.save()로 모델 저장

답변

스터디 모델을 1편에서 만들었잖아요?
그 모델이랑 연결되는 form을 만들라는거에용
모델과 연관성있는 것 무언가 입력을 받는 구조의 폼이라고 생각


Form은
그냥 입력창을 만드는 도구
어떤 값을 받을지 직접 다 적어줘야 함
저장도 직접 해야 함

즉, “입력만 받는 일반 양식”이라고 이해하시면 됩니다.

ModelForm은
모델을 기준으로 폼을 쉽게 만드는 도구
모델 필드를 바탕으로 입력창을 만들 수 있음
검증도 도와주고, form.save()로 DB 저장도 쉬움

즉, “모델이랑 연결된 폼”이라고 이해하시면 됩니다.

우리가 템플릿에서 보는 <form> 태그는
사용자가 값을 입력해서 보내는 HTML 영역이에요!

사용자가 입력한 값이 서버로 전달되면,
서버에서 ModelForm이 그 값을 받아 검증하고,
문제가 없으면 저장한다고 생각하시면 됩니당

나의질문

study 앱에 폼을 만들고 그 폼이라는것은 그냥 앱 생성할때마다 만드는 폼이라고 생각하면되나요.. 그리고 그안에 CRUS페이지까지 스터디앱에 만드는거죠?

답변

폼은 앱 만들 때 무조건 만드는 게 아니라, 사용자의 입력을 받아야 할 때 만드는 거예요! 항상 만드는건 아니에용 그리고 Study 앱을 만들었으니까, Study 관련 CRUD 페이지도 그 앱 안에서 같이 만듭니다


Form vs ModelForm 적용 범위

아니요, 둘 다 모델 파일과 독립적으로 사용할 수 있습니다.


forms.Form — 모델과 무관

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)
  • 모델 없이 순수하게 입력값 처리/검증만 할 때 사용
  • 예: 문의 폼, 검색 폼, 로그인 폼, 계산기 폼 등

forms.ModelForm — 모델과 연결됨

class StudyForm(forms.ModelForm):
    class Meta:
        model = Study  # ← 특정 모델에 종속
        fields = [...]
  • 반드시 Meta.model에 연결할 모델이 필요
  • form.save()로 DB에 바로 저장 가능

정리

구분모델 필요 여부DB 저장
forms.Form❌ 불필요직접 처리해야 함
forms.ModelForm✅ 필수form.save()로 자동

즉, ModelForm만 모델 파일에 해당되고, Form은 모델 없이 어디서든 독립적으로 사용할 수 있습니다.


1. forms.Form이 필요한 때

모델에 저장할 필요 없이 입력값만 처리할 때 사용합니다.

# 예시 1 - 검색 폼
class SearchForm(forms.Form):
    keyword = forms.CharField()
    # 검색어를 받아서 필터링만 할 뿐, DB에 저장 안 함

# 예시 2 - 로그인 폼
class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)
    # 인증만 하고 저장 X

# 예시 3 - 문의/이메일 폼
class ContactForm(forms.Form):
    email = forms.EmailField()
    message = forms.CharField()
    # 이메일로 전송만 하고 저장 X

2. "메서드"라는 표현에 대해

정확히는 구분해서 불러야 합니다.

용어설명예시
클래스(Class)설계도 전체StudyForm, LoginForm
메서드(Method)클래스 안의 함수clean_minutes(), save()
필드(Field)클래스 안의 변수/속성title, email
class StudyForm(forms.ModelForm):  # ← 클래스
    
    title = forms.CharField()      # ← 필드
    
    def clean_minutes(self):       # ← 메서드
        ...

그래서

  • StudyForm 자체 → 클래스
  • clean_minutes()메서드
  • forms.Form, forms.ModelForm클래스를 상속받는 것

"Form이랑 ModelForm 메서드야?" 라고 하면 엄밀히는 클래스라고 표현하는 게 맞습니다.

profile
개발언어를 배우는 과정 기록

0개의 댓글