カテゴリ: 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
Django
Djangoマイグレーション自動生成の仕組み|models.pyとの関係を初心者向けに徹底解説
New2
Flask
PythonのFlaskでテンプレートを多言語化!翻訳の基本構文を完全ガイド
New3
Flask
Flaskで多対多のリレーションを作る!中間テーブルの基本構造を学ぼう
New4
Python
Pythonの関数を使ったカスタムソート(keyパラメータ)をわかりやすく解説!初心者でも使える並べ替えテクニック
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.3
Java&Spring記事人気No3
Python
Pythonの変数宣言と型ヒントの使い方!初心者向けに基礎をやさしく解説
No.4
Java&Spring記事人気No4
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.5
Java&Spring記事人気No5
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.6
Java&Spring記事人気No6
Flask
PythonのFlaskで翻訳用のメッセージファイルを作成する手順を完全ガイド!
No.7
Java&Spring記事人気No7
Flask
PythonのFlaskで言語を自動判別!ユーザーに合わせた表示切り替えの仕組みを徹底解説
No.8
Java&Spring記事人気No8
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説