Djangoフォーム入門|forms.Form と ModelForm の違いを初心者向けにやさしく解説
生徒
「Djangoで入力フォームを作りたいんですが、forms.Form と ModelForm って何が違うんですか?」
先生
「Djangoにはフォーム処理を簡単にする仕組みがあって、その代表が forms.Form と ModelForm なんです。」
生徒
「パソコンをあまり触ったことがなくても理解できますか?」
先生
「大丈夫です。紙の申込書に例えながら、Djangoフォームの基本から順番に説明します。」
1. Djangoのフォーム処理とは何か
Djangoのフォーム処理とは、画面に入力欄を表示し、ユーザーが入力した内容を受け取って確認する仕組みです。例えば、名前やメールアドレスを書く申込書を、パソコン画面で扱えるようにしたものがフォームです。
Djangoでは、このフォーム作成と入力チェックを自動で助けてくれる機能があります。これにより、プログラミング初心者でも安全で正確な入力画面を作れます。
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 は、すでにあるデータベースの設計図をそのまま申込書にするイメージです。Djangoのモデルと連動して、自動的に入力欄を作ってくれます。
「モデル」とは、データを保存する箱の設計図のことです。名前や年齢など、何を保存するかを決めたものです。
from django import forms
from .models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ["name", "age"]
4. forms.Form と ModelForm の違い
forms.Form は自由に書けるノート、ModelForm は決まった書式の申請書のような違いがあります。データベースを使わない場合は forms.Form、保存したい場合は ModelForm が便利です。
Djangoフォームの違いを理解することで、どの場面でどちらを使うべきか判断できるようになります。
5. ビューでのフォーム処理の流れ
ビューとは、入力を受け取って処理する担当者のような存在です。フォームを表示し、ボタンが押されたら内容を確認します。
from django.shortcuts import render
from .forms import ContactForm
def contact_view(request):
form = ContactForm(request.POST or None)
if form.is_valid():
print(form.cleaned_data)
return render(request, "contact.html", {"form": form})
6. テンプレートでフォームを表示する
テンプレートは、画面の見た目を作る場所です。Djangoフォームは、たった一行で入力欄をまとめて表示できます。
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">送信</button>
</form>
7. 初心者がつまずきやすいポイント
Djangoフォーム初心者がよく困るのは、入力チェックやエラー表示です。Djangoは自動で「正しくない入力」を教えてくれるため、難しい処理を書かなくても安心です。
forms.Form と ModelForm の役割を理解することで、Djangoのフォーム処理全体がぐっと分かりやすくなります。