Sign In
TIL 웹개발

TIL 웹개발 - Django form 정리

서경태
우선 form은 클라이언트가 데이터를 조회하거나 전송할 때 사용하는 태그(tag)다.
게시글을 작성하는 form을 작성하면 아래 코드와 같다.
# html에서 사용할 때 <form action="" method=""> <label for="title">제목</label> <input type="text" id="title" name="title"> <label for="content">내용</label> <textarea id="content" name="content" cols=10 rows=10> </form>
제목과 내용을 작성해 form형태로 서버에 전달해 처리한다.
이 form 형태를 쉽게 처리하는 기능을 django에서 제공하는데 D
jango model form이다.
데이터베이스 모델에 대응하는 폼을 자동으로 생성해주는 기능으로 위 코드처럼 별도로 폼을 정의하지 않아도 된다.
그리고 데이터베이스 기준에 따라 (텍스트, 숫자 등) 형식을 맞추지 않을 경우 자동으로 경고 메시지를 보내주기도 한다.

Django model form

1.
모델과 폼의 자동 연결
ModelForm을 사용하면, Django 모델에 정의된 필드를 기반으로 자동으로 폼 필드가 생성된다.
예를 들어, 모델에서 Charfield, DateField 등이 있다면, 해당 필드에 맞는 html 폼 필드가 생성된다.
2.
간편한 데이터 처리
모델 폼은 데이터의 유효성을 검사하고, 유효하다면 데이터베이스에 쉽게 저장할 수 있다.
form.save() 메소드를 사용하면 폼데이터를 모델 인스턴스로 변환하고 저장할 수 있다.
3.
유효성 검사
모델 폼은 모델에서 정의된 필드의 유효성 검사(예: 최대 길이, 필수 입력 여부)를 자동으로 처리한다.
추가적인 커스텀 유효성 검살르 쉽게 정의할 수 있다.

모델 폼 정의하는 방법

Article 데이터베이스 / models.py
from django.db import models class Article(models.Model): title = models.CharField(max_length=50) content = modles.TextField() def __str__(self): return self.title
현재 title과 content라는 데이터 베이스가 있는 경우,
from django import forms from .models import Article # 위 models.py에서 Article 모델을 참조하도록 설정한다. class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'content'] # 사용할 모델의 필드 지정 # 모든 필드를 사용하고 싶다면 # fields = "__all__"
이렇게 하면 모델폼을 정의하고 사용할 수 있다.
그럼 다시 html에서 아래와 같이 간단하게 사용할 수 있다.
# html에서 모델폼 사용 <form action="" method=""> {{ form.as_p }} </form>
그리고 해당 내용을 전송받는 view에서도 title과 content를 받아 새로운 article을 생성하는 번거로움 없이 아래 코드처럼 작성할 수 있다.
# view.py 에서 def create(request): form = ArticleForm(request.POST) if form.is_valid(): article = form.save() return redirect('detail', article.pk) # html form을 사용하는 경우 코드 # title = request.POST.get("title") # content = request.POST.get("content") # article = Article.objects.create(title=title, content=content) # return redirect("detail", article.pk)
이처럼 모델폼을 사용하면 유효성 검사까지 간단하게 할 수 있다.
Subscribe to 'kyugntae-ai'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'kyugntae-ai'!
Subscribe
👍