Django ModelFormとforms.Formの違いを完全比較!初心者でもわかるフォーム作成入門
生徒
「Djangoでフォームを作ろうとすると、ModelFormとforms.Formが出てきて、どっちを使えばいいのか分かりません…」
先生
「Djangoではフォームの作り方が2種類あります。それぞれ役割が違うので、順番に見ていくと理解しやすいですよ。」
生徒
「プログラミングもパソコンも初めてなんですが、大丈夫ですか?」
先生
「もちろんです。紙の申込書に例えながら説明していきましょう。」
1. Djangoのフォームとは何か?
Djangoのフォームとは、Web画面に表示される入力欄のことです。名前やメールアドレスを入力する箱を想像してください。これをプログラムで安全に扱うための仕組みがフォームです。
Djangoにはforms.FormとModelFormという2種類のフォームがあります。どちらも「入力を受け取る」という役割は同じですが、使い道が異なります。
2. forms.Formとは?特徴とイメージ
forms.Formは、まっさらな紙の申込書を自分で作るイメージです。項目も保存方法もすべて手作業で決めます。
たとえば「お問い合わせフォーム」のように、データベースに保存しなくてもよい場合によく使われます。
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(label="名前")
email = forms.EmailField(label="メールアドレス")
message = forms.CharField(label="内容")
3. ModelFormとは?特徴とイメージ
ModelFormは、すでにある「台帳(データベース)」と連動した申込書です。モデルと呼ばれる設計図をもとに、自動でフォームを作ってくれます。
ユーザー登録や商品登録など、「入力した内容を保存したい」場面で活躍します。
from django.forms import ModelForm
from .models import User
class UserForm(ModelForm):
class Meta:
model = User
fields = ["username", "email"]
4. データベースとの関係の違い
forms.Formは、入力箱だけを用意する仕組みです。一方、ModelFormは「モデル(ORM)」と強く結びついています。
ORMとは、データベースを日本語感覚で操作できるDjangoの便利機能です。ModelFormはそのORMと連携して、保存や更新を自動で行います。
form = UserForm(request.POST)
if form.is_valid():
form.save()
5. バリデーションの書きやすさ比較
バリデーションとは「入力チェック」のことです。文字数や形式が正しいかを確認します。
forms.Formでは自分で細かく設定しますが、ModelFormではモデル側のルールを自動で使えます。
class SampleForm(forms.Form):
age = forms.IntegerField(min_value=0, max_value=120)
6. 初心者におすすめなのはどっち?
完全な初心者には、データ保存が必要な場合はModelFormがおすすめです。理由は「書く量が少なく、失敗しにくい」からです。
forms.Formは自由度が高い分、覚えることが多くなります。まずはModelFormで流れをつかむと安心です。
7. 実務での使い分けポイント
お問い合わせや検索フォームなど、保存しないものはforms.Form、会員登録や投稿フォームなど保存するものはModelForm、と覚えるとシンプルです。
Djangoのフォーム処理では、この使い分けがとても重要になります。
8. Django ModelFormとforms.Formの違いまとめ的理解
ModelFormは「モデルありき」、forms.Formは「自由設計」です。どちらもDjangoフォーム処理の重要な部品なので、違いを理解することが大切です。
最初は完璧に理解できなくても問題ありません。使いながら少しずつ慣れていきましょう。