Djangoバリデーションの種類まとめ|フォーム・モデル・フィールドレベルの違いを初心者向けに徹底解説
生徒
「Djangoで入力チェックって必要なんですか?そもそも何をしているのか分からなくて…」
先生
「Djangoでは、文字の入力ミスや変な値が入らないように“バリデーション”という確認作業をします。」
生徒
「バリデーションって、どこで書けばいいんですか?」
先生
「Djangoでは、フォーム・モデル・フィールドという3つの場所で書けます。それぞれ役割が違うので、順番に見ていきましょう。」
1. Djangoのバリデーションとは何か?
Djangoのバリデーションとは、ユーザーが入力した内容が「正しいかどうか」を確認する仕組みです。たとえば年齢にマイナスの数字が入っていないか、メールアドレスの形が変ではないかをチェックします。
これは、お店の入り口で年齢確認をするようなものです。確認をしないと、後でトラブルになります。Djangoではこの確認を自動かつ安全に行えます。
2. バリデーションが必要な理由
プログラミング未経験の方でも、名前入力欄に電話番号を入れてしまうと困るのは想像できます。バリデーションがないと、データベース(データを保存する箱)におかしな情報が入ってしまいます。
Djangoのバリデーションを使うことで、入力ミスを防ぎ、アプリやWebサイトを安全に保つことができます。
3. フォームレベルのバリデーション
フォームバリデーションは、画面から送られてきた入力全体をチェックします。たとえば「パスワード」と「確認用パスワード」が同じかを見る場合に使います。
from django import forms
class SampleForm(forms.Form):
age = forms.IntegerField()
def clean_age(self):
age = self.cleaned_data['age']
if age < 0:
raise forms.ValidationError("年齢は0以上で入力してください。")
return age
ここでは、年齢が0未満ならエラーを出しています。
4. フィールドレベルのバリデーション
フィールドレベルとは、1つの入力欄だけを見る方法です。数字、文字数、必須かどうかなどをチェックします。
from django.core.validators import MinValueValidator
from django.db import models
class Product(models.Model):
price = models.IntegerField(validators=[MinValueValidator(0)])
これは「値段は0円以上にしてください」という意味です。とてもシンプルで初心者向けです。
5. モデルレベルのバリデーション
モデルバリデーションは、データベースに保存する直前の最終チェックです。フォームを使わない場合でも動きます。
from django.core.exceptions import ValidationError
from django.db import models
class User(models.Model):
name = models.CharField(max_length=20)
def clean(self):
if "@" in self.name:
raise ValidationError("名前に@は使えません。")
ここでは、名前に使ってはいけない文字を防いでいます。
6. フォーム・モデル・フィールドの違い
フォームは「入力画面」、モデルは「保存前の最終確認」、フィールドは「1項目ごとのルール」です。
例えるなら、フォームは受付、フィールドは書類の記入欄、モデルは提出前チェック係です。
7. エラーメッセージの表示の仕組み
Djangoでは、バリデーションエラーが起きると自動でメッセージを表示できます。
{% if form.errors %}
<p>入力内容にエラーがあります。</p>
{% endif %}
これにより、初心者でも「どこが間違っているか」が分かります。
8. Djangoバリデーションでよくある失敗
初心者がよく間違えるのは、バリデーションを書いたのに呼ばれていないケースです。フォームやモデルの使い分けを意識することが大切です。
Djangoのバリデーションは、正しい場所に書くことで最大の効果を発揮します。