Djangoバリデーション入門|フォームとモデルの入力チェック基本をやさしく理解しよう
生徒
「Djangoで作った入力画面に、変な文字や空っぽのまま送信されないようにできますか?」
先生
「できますよ。Djangoにはバリデーションという入力チェックの仕組みがあります。」
生徒
「バリデーションって何ですか?パソコンもほとんど触ったことがなくて…」
先生
「大丈夫です。例え話を交えながら、フォームとモデルのバリデーションを一から説明しますね。」
1. Djangoバリデーションとは何か?
Djangoのバリデーションとは、ユーザーが入力した内容が「正しいかどうか」を確認する仕組みです。たとえば、年齢欄に文字が入っていたり、名前が空っぽのまま送信されたりすると困りますよね。
これは、入場前にチケットを確認する係員のような存在です。条件に合わない場合は、中に入れずエラーメッセージを表示します。
Djangoでは、フォームとモデルの両方でバリデーション(入力チェック)を行えるのが大きな特徴です。
2. フォームバリデーションの基本
Djangoフォームは、入力画面とチェック処理をまとめて管理できます。フォームは「記入用紙」、バリデーションは「記入内容の確認作業」と考えると分かりやすいです。
以下は、名前が空の場合にエラーを出すシンプルな例です。
from django import forms
class SampleForm(forms.Form):
name = forms.CharField(required=True)
required=Trueは「必ず入力してください」という意味です。これだけで、空欄チェックが自動で行われます。
3. cleanメソッドで独自チェックを作る
もう少し細かいルールを決めたい場合は、cleanメソッドを使います。これは「提出前の最終確認」のようなものです。
たとえば、年齢が20歳未満ならエラーにする例です。
from django import forms
class AgeForm(forms.Form):
age = forms.IntegerField()
def clean_age(self):
age = self.cleaned_data['age']
if age < 20:
raise forms.ValidationError("20歳未満の方は利用できません。")
return age
ValidationErrorは「入力がルール違反です」と伝えるための仕組みです。
4. モデルバリデーションの考え方
Djangoモデルは、データベースに保存する設計図です。モデルのバリデーションは「保存前の最終関門」と考えてください。
たとえば、文字数制限をモデル側で設定できます。
from django.db import models
class User(models.Model):
username = models.CharField(max_length=10)
max_length=10は「10文字まで」という意味で、これも立派なバリデーションです。
5. モデルのcleanメソッドでのチェック
モデルにもcleanメソッドがあり、保存前に独自ルールを追加できます。
from django.core.exceptions import ValidationError
from django.db import models
class Product(models.Model):
price = models.IntegerField()
def clean(self):
if self.price < 0:
raise ValidationError("価格は0以上で入力してください。")
これにより、不正なデータがデータベースに入るのを防げます。
6. フォームとモデルの役割分担
初心者の方は「どこでバリデーションを書くの?」と迷いやすいです。
- フォーム:画面入力時のチェック
- モデル:データ保存時の最終チェック
例えるなら、フォームは受付、モデルは金庫です。受付で確認し、最後に金庫でも確認します。
7. エラーメッセージの表示イメージ
バリデーションに引っかかると、画面にはエラーメッセージが表示されます。
20歳未満の方は利用できません。
この表示があることで、ユーザーは「何を直せばいいか」がすぐ分かります。
8. Djangoバリデーションを使うメリット
Djangoのバリデーションを使うことで、入力ミスを防ぎ、安全で信頼できるアプリが作れます。
特に初心者のうちは、「自動でチェックしてくれる仕組みがある」という点が大きな安心材料になります。