カテゴリ: 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
Python
Pythonでセットの要素数を調べる方法(len()の使い方)を初心者向けに解説!
New2
Python
Pythonのfrozensetとは?ミュータブルなsetとの違いをわかりやすく解説
New3
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New4
Python
Pythonでセットを活用してデータをフィルタリングする方法!初心者でもわかるセットの基本と使い方
人気記事
No.1
Java&Spring記事人気No1
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.3
Java&Spring記事人気No3
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskでAPIを作る基本!初心者向けに仕組みと特徴をやさしく解説
No.6
Java&Spring記事人気No6
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
No.7
Java&Spring記事人気No7
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド
No.8
Java&Spring記事人気No8
Python
Pythonの文字列操作完全ガイド!結合・分割・検索の基本をやさしく解説