PyCharm 2026.3 Help

Pydantic

Pydantic は、標準的な Python 型アノテーションを利用してデータモデルを定義するデータバリデーションライブラリです。 PyCharm は、Pydantic モデル向けに、他の 型ヒント機能 を提供しているのと同じ型エンジン上に構築された専用のサポートを提供します。

このサポートは、 pydantic.BaseModel とそのサブクラス、 pydantic.dataclasses.dataclass 、ジェネリックモデル、および フィールド 、モデルやフィールドバリデーター、 ConfigDict オプションなどの関連構造をカバーします。 PyCharm は Pydantic v1 と v2 の両方を認識しますが、 allow_population_by_field_name など、v1 class Config のオプションは読み取りません。

モデルフィールドのコードインサイト

Pydantic モデルをインスタンス化すると、PyCharm は宣言されたフィールドを __init__ のキーワード引数として扱い、次のコードインサイトを提供します:

  • 宣言された型とデフォルト値を考慮して、フィールド名をキーワード引数として補完します。

  • 各フィールドに渡された値が対応するアノテーションと合致しているかの型チェック。

  • 必須フィールドの未入力をハイライトするインスペクション。 Annotated[..., Field(...)] と = の後のデフォルト値で宣言されたフィールドは必須ではありません。

  • __init__ 呼び出しにおけるキーワード引数からフィールド宣言へのナビゲーションや戻る操作が可能で、サブクラスや基底クラス間も対応します。

from pydantic import BaseModel class User(BaseModel): id: int name: str is_active: bool = True User(id=1, name="Alice") # valid User(id="not-an-int", name="Steve") # type mismatch on id User(id=1) # name is missing

フィールドのエイリアスとバリデーション設定

PyCharm は、 Field(alias=...) を通じてエイリアス付きで宣言されたフィールドを、コンストラクター呼び出しのキーワード引数として受け入れ、誤った "unexpected argument" 警告を出しません。

PyCharm はモデル構成を考慮するため、エディター内のコードインサイトはランタイム検証の動作と一致します。 PyCharm は、クラスのキーワード引数、 model_config 、および pydantic.dataclasses.dataclass の config 引数または __pydantic_config__ からオプションを読み取ります。 サブクラスは基底クラスのオプションを継承します。

  • populate_by_name=True または validate_by_name=True: PyCharm はエイリアスに加えてフィールド名を受け入れます。

  • validate_by_alias=False: PyCharm はフィールド名のみを受け入れます。 デフォルトでは、PyCharm はエイリアスを受け入れます。

PyCharm は、モデルのクラスヘッダーでキーワード引数として渡すときに ConfigDict オプションの名前を補完するため、正確なオプション名を思い出す必要はありません。

両方のオプションが有効な場合、PyCharm はフィールド名とそのエイリアスをキーワード引数として受け入れます:

from pydantic import BaseModel, Field class Model(BaseModel, validate_by_name=True, validate_by_alias=True): my_field: str = Field(alias='my_alias') Model(my_alias='foo') # valid Model(my_field='foo') # valid

PyCharm は、通常のアノテーション内でも typing.Annotated 内で使用されている場合でも、 フィールド を認識します:

from typing import Annotated from pydantic import BaseModel, Field class User(BaseModel): name: Annotated[str, Field(alias='alias_name')] = "Lucy" age: int = Field(alias='alias_age', default=20)

フィールド制約の検証

PyCharm は、モデルコンストラクターに渡されたリテラル値を、 フィールド で宣言された基本制約に照らしてチェックし、値が制約を満たさない場合に警告を報告します。 次の制約が認識されます:

  • min_length および max_length は文字列フィールド用です。

  • gt、 ge、 lt 、および le は数値フィールド用です。

from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(..., min_length=2, max_length=50) age: int = Field(..., gt=0, lt=120) price: float = Field(..., gt=0) User(name="J", age=150, price=0) # name is too short, age is out of range, price must be greater than 0

制約は typing.Annotated を通じて宣言された場合も認識されます。

このチェックは Pydantic フィールドの制約に違反しています インスペクション によって実行されます。 外部型エンジン が選択されている場合は実行されません。

リファクタリングとバリデーター

モデルフィールドの名前を変更すると、モデルの __init__ 呼び出し内のキーワード引数の名前も変更されます。 このようなキーワード引数の名前を変更すると、フィールド宣言の名前も変更されます。

@field_validator、 @field_serializer 、および既存の @validator では、PyCharm は文字列として渡されたフィールド名を解決します: 補完、フィールド宣言への移動、これらの文字列と合わせたフィールド名の変更ができます。

@field_validator、 @model_validator 、または @validator が @classmethod と組み合わされている場合、 デコレーターの問題のあるネスト インスペクションは報告しません。

2026 年 10 月 30 日