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__呼び出しにおけるキーワード引数からフィールド宣言へのナビゲーションや戻る操作が可能で、サブクラスや基底クラス間も対応します。
フィールドのエイリアスとバリデーション設定
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 はフィールド名とそのエイリアスをキーワード引数として受け入れます:
PyCharm は、通常のアノテーション内でも typing.Annotated 内で使用されている場合でも、 フィールド を認識します:
フィールド制約の検証
PyCharm は、モデルコンストラクターに渡されたリテラル値を、 フィールド で宣言された基本制約に照らしてチェックし、値が制約を満たさない場合に警告を報告します。 次の制約が認識されます:
min_lengthおよびmax_lengthは文字列フィールド用です。gt、ge、lt、およびleは数値フィールド用です。
制約は typing.Annotated を通じて宣言された場合も認識されます。
このチェックは Pydantic フィールドの制約に違反しています インスペクション によって実行されます。 外部型エンジン が選択されている場合は実行されません。
リファクタリングとバリデーター
モデルフィールドの名前を変更すると、モデルの __init__ 呼び出し内のキーワード引数の名前も変更されます。 このようなキーワード引数の名前を変更すると、フィールド宣言の名前も変更されます。
@field_validator、 @field_serializer 、および既存の @validator では、PyCharm は文字列として渡されたフィールド名を解決します: 補完、フィールド宣言への移動、これらの文字列と合わせたフィールド名の変更ができます。
@field_validator、 @model_validator 、または @validator が @classmethod と組み合わされている場合、 デコレーターの問題のあるネスト インスペクションは報告しません。