Pydantic model_validator について

2025年8月3日 engineering

こんにちは、 @kz_morita です。

Pydanticのmodel_validatorについて、簡単にまとめておきます。

model_validatorとは

Pydanticの model_validatorは、モデル全体に対してバリデーションを行うためのデコレータです。個別のフィールドではなく、複数フィールド間の関係性や、モデル全体の整合性をチェックする際に使用します。

基本的な2つのモード

afterモード

モデル作成後にバリデーションを実行。既にバリデーション済みのインスタンスを操作できるため、型安全で使いやすいのが特徴です。

beforeモード

モデル作成前の生データに対してバリデーションを実行。データの前処理や正規化に適しています。

実用例:パスワード確認

from typing_extensions import Self
from pydantic import BaseModel, ValidationError, model_validator

class UserRegistration(BaseModel):
    username: str
    password: str
    password_confirm: str

    @model_validator(mode='after')
    def check_passwords_match(self) -> Self:
        if self.password != self.password_confirm:
            raise ValueError('パスワードが一致しません')
        return self

# 使用例
try:
    user = UserRegistration(
        username="test",
        password="secret123", 
        password_confirm="secret456"
    )
except ValidationError as e:
    print(e)  # パスワードが一致しません

いつ使うべきか

例えばこんな処理で使えそうというユースケースをあげてみます。

  • パスワードと確認用パスワードの一致チェック
  • 開始日と終了日の順序確認
  • 複数フィールドの組み合わせによる制約
  • 条件付きでフィールドが必須になる場合

field_validatorでは対応できない、フィールド間の関係性をチェックする場面で威力を発揮します。

この記事をシェア