カテゴリ: Django 更新日: 2026/02/15

Djangoバリデーション入門|フォームとモデルの入力チェック基本をやさしく理解しよう

Djangoバリデーション入門|フォームとモデルの入力チェック基本を理解する
Djangoバリデーション入門|フォームとモデルの入力チェック基本を理解する

先生と生徒の会話形式で理解しよう

生徒

「Djangoで作った入力画面に、変な文字や空っぽのまま送信されないようにできますか?」

先生

「できますよ。Djangoにはバリデーションという入力チェックの仕組みがあります。」

生徒

「バリデーションって何ですか?パソコンもほとんど触ったことがなくて…」

先生

「大丈夫です。例え話を交えながら、フォームとモデルのバリデーションを一から説明しますね。」

1. Djangoバリデーションとは何か?

1. Djangoバリデーションとは何か?
1. Djangoバリデーションとは何か?

Djangoのバリデーションとは、ユーザーが入力した内容が「正しいかどうか」を確認する仕組みです。たとえば、年齢欄に文字が入っていたり、名前が空っぽのまま送信されたりすると困りますよね。

これは、入場前にチケットを確認する係員のような存在です。条件に合わない場合は、中に入れずエラーメッセージを表示します。

Djangoでは、フォームとモデルの両方でバリデーション(入力チェック)を行えるのが大きな特徴です。

2. フォームバリデーションの基本

2. フォームバリデーションの基本
2. フォームバリデーションの基本

Djangoフォームは、入力画面とチェック処理をまとめて管理できます。フォームは「記入用紙」、バリデーションは「記入内容の確認作業」と考えると分かりやすいです。

以下は、名前が空の場合にエラーを出すシンプルな例です。


from django import forms

class SampleForm(forms.Form):
    name = forms.CharField(required=True)

required=Trueは「必ず入力してください」という意味です。これだけで、空欄チェックが自動で行われます。

3. cleanメソッドで独自チェックを作る

3. cleanメソッドで独自チェックを作る
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. モデルバリデーションの考え方

4. モデルバリデーションの考え方
4. モデルバリデーションの考え方

Djangoモデルは、データベースに保存する設計図です。モデルのバリデーションは「保存前の最終関門」と考えてください。

たとえば、文字数制限をモデル側で設定できます。


from django.db import models

class User(models.Model):
    username = models.CharField(max_length=10)

max_length=10は「10文字まで」という意味で、これも立派なバリデーションです。

5. モデルのcleanメソッドでのチェック

5. モデルのcleanメソッドでのチェック
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. フォームとモデルの役割分担

6. フォームとモデルの役割分担
6. フォームとモデルの役割分担

初心者の方は「どこでバリデーションを書くの?」と迷いやすいです。

  • フォーム:画面入力時のチェック
  • モデル:データ保存時の最終チェック

例えるなら、フォームは受付、モデルは金庫です。受付で確認し、最後に金庫でも確認します。

7. エラーメッセージの表示イメージ

7. エラーメッセージの表示イメージ
7. エラーメッセージの表示イメージ

バリデーションに引っかかると、画面にはエラーメッセージが表示されます。


20歳未満の方は利用できません。

この表示があることで、ユーザーは「何を直せばいいか」がすぐ分かります。

8. Djangoバリデーションを使うメリット

8. Djangoバリデーションを使うメリット
8. Djangoバリデーションを使うメリット

Djangoのバリデーションを使うことで、入力ミスを防ぎ、安全で信頼できるアプリが作れます。

特に初心者のうちは、「自動でチェックしてくれる仕組みがある」という点が大きな安心材料になります。

カテゴリの一覧へ
新着記事
New1
Flask
FlaskアプリをAWS Lambdaでサーバーレス化する方法を完全ガイド!初心者でもできるデプロイ手順
New2
Python
Pythonで複数の例外をまとめてキャッチする方法を完全解説!初心者でもわかる例外処理入門
New3
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
New4
Django
Djangoバリデーションの種類まとめ|フォーム・モデル・フィールドレベルの違いを初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.4
Java&Spring記事人気No4
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説
No.5
Java&Spring記事人気No5
Python
Pythonのコーディング規約(PEP8)とは?初心者でもわかる書き方の基本ルール
No.6
Java&Spring記事人気No6
Flask
Flaskでフロントエンドからファイルアップロードを行う基本手順【初心者向け】
No.7
Java&Spring記事人気No7
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
No.8
Java&Spring記事人気No8
Django
DjangoのincludeでURLを分割管理する方法を完全ガイド!初心者でも迷わないURLルーティング入門