Django ModelFormの使い方を初心者向けに完全解説|models.pyと連携してフォームを自動生成しよう
生徒
「Djangoで入力フォームを作るって聞いたんですけど、何を書けばいいのか全然わかりません…」
先生
「Djangoには ModelForm という仕組みがあって、難しいことを書かなくてもフォームを作れます。」
生徒
「フォームって、名前やメールアドレスを入力するあの画面ですよね?」
先生
「その通りです。今回は、models.py と連携してフォームを自動生成する方法を、ゆっくり説明します。」
1. Django ModelFormとは何か?
Django ModelFormとは、データベースの設計図である モデル(Model) を元にして、入力フォームを自動で作ってくれる仕組みです。
たとえるなら、「申込用紙を作るとき、名簿の項目を見て自動で用紙を作ってくれるロボット」のような存在です。
通常、フォームを一から作るのは大変ですが、ModelFormを使うと Django フォーム処理 がとても楽になります。
2. models.pyとは?データの設計図
models.py は、データベースに保存する内容を決めるファイルです。
たとえば「名前」と「年齢」を保存したい場合、次のように書きます。
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField()
CharField は文字、IntegerField は数字を意味します。max_length は「最大何文字までか」を決めています。
3. ModelFormでフォームを自動生成する仕組み
ModelFormは、この Person モデルを見て「名前入力欄」と「年齢入力欄」を自動で作ります。
つまり、同じ内容を二度書かなくてよい、というのが大きなメリットです。
Django 初心者にとって、ミスを減らせる便利な機能です。
4. forms.pyを作ってModelFormを書く
次に、アプリの中に forms.py というファイルを作ります。
ここに ModelForm を定義します。
from django import forms
from .models import Person
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['name', 'age']
Meta クラスは「設定を書く場所」です。どのモデルを使うか、どの項目をフォームに出すかを指定します。
5. views.pyでModelFormを使う
次は views.py でフォームを表示し、入力内容を保存します。
from django.shortcuts import render, redirect
from .forms import PersonForm
def create_person(request):
if request.method == 'POST':
form = PersonForm(request.POST)
if form.is_valid():
form.save()
return redirect('success')
else:
form = PersonForm()
return render(request, 'person_form.html', {'form': form})
POST は「入力して送信したとき」、それ以外は「最初に画面を開いたとき」です。
6. テンプレートでフォームを表示する
HTMLファイルでは、Django テンプレートを使ってフォームを表示します。
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">送信</button>
</form>
{{ form.as_p }} は、フォームを段落形式で表示する命令です。
csrf_token はセキュリティ対策で、Django フォーム処理では必須です。
7. ModelFormを使うメリット
Django ModelFormを使うと、次のような良い点があります。
- フォーム作成がとても簡単
- モデルと連動しているのでミスが少ない
- Django 初心者でも安全に使える
特に models.py と連携したフォーム自動生成 は、Django 学習で必ず覚えたいポイントです。
8. 初心者がつまずきやすいポイント
よくある間違いは、forms.py を作り忘れることや、Meta クラスを書き忘れることです。
また、HTMLで method="post" を書かないと、データは送信されません。
一つ一つ確認しながら進めるのが大切です。