コンテンツにスキップ

別名

エイリアスはフィールドの代替名で、データをシリアル化および逆シリアル化するときに使用されます。

次の方法でエイリアスを指定できます。

  • Fieldalias
    • strである必要があります
  • Fieldvalidation_alias
  • Fieldserialization_alias
    • strである必要があります
  • Configalias_generator
    • 呼び出し可能なもの、または AliasGenerator のインスタンスにすることができます。

aliasvalidation_alias 、およびserialization_aliasの使用例については、 「フィールド エイリアス」を参照してください。

AliasPathAliasChoices

??? API「APIドキュメント」

[`pydantic.aliases.AliasPath`][pydantic.aliases.AliasPath]<br>
[`pydantic.aliases.AliasChoices`][pydantic.aliases.AliasChoices]<br>

Pydantic は、 validation_alias使用する際の利便性のために、 AliasPathAliasChoices 2 つの特別な型を提供します。

AliasPath 、エイリアスを使用してフィールドへのパスを指定するために使用されます。例えば:

from pydantic import BaseModel, Field, AliasPath


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasPath('names', 0))
    last_name: str = Field(validation_alias=AliasPath('names', 1))

user = User.model_validate({'names': ['John', 'Doe']})  # (1)!
print(user)
#> first_name='John' last_name='Doe'
  1. フィールド エイリアスを使用して辞書を検証するために、 model_validate使用しています。

model_validate の詳細については、API リファレンスを参照してください。

'first_name'フィールドでは、エイリアス'names'とインデックス0を使用して名へのパスを指定しています。 'last_name'フィールドでは、エイリアス'names'とインデックス1を使用して姓へのパスを指定しています。

AliasChoices 、エイリアスの選択を指定するために使用されます。例えば:

from pydantic import BaseModel, Field, AliasChoices


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', 'fname'))
    last_name: str = Field(validation_alias=AliasChoices('last_name', 'lname'))

user = User.model_validate({'fname': 'John', 'lname': 'Doe'})  # (1)!
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'first_name': 'John', 'lname': 'Doe'})  # (2)!
print(user)
#> first_name='John' last_name='Doe'
  1. 両方のフィールドに 2 番目のエイリアスを使用しています。
  2. 最初のエイリアス選択をフィールド'first_name'に使用し、2 番目のエイリアス選択をフィールド'last_name'に使用します。

AliasChoices AliasPathとともに使用することもできます。

from pydantic import BaseModel, Field, AliasPath, AliasChoices


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', AliasPath('names', 0)))
    last_name: str = Field(validation_alias=AliasChoices('last_name', AliasPath('names', 1)))


user = User.model_validate({'first_name': 'John', 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John', 'Doe']})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John'], 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'

エイリアスジェネレーターの使用

Configalias_generatorパラメーターを使用して、モデル内のすべてのフィールドのエイリアスを生成する呼び出し可能オブジェクト (またはAliasGeneratorを介した呼び出し可能オブジェクトのグループ) を指定できます。これは、モデル内のすべてのフィールドに一貫した命名規則を使用したいが、各フィールドの別名を個別に指定したくない場合に便利です。

!!! Pydantic には、すぐに使用できる 3 つの組み込みエイリアス ジェネレーターが用意されています。

[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>

呼び出し可能オブジェクトの使用

呼び出し可能オブジェクトを使用した基本的な例を次に示します。

from pydantic import BaseModel, ConfigDict


class Tree(BaseModel):
    model_config = ConfigDict(
        alias_generator=lambda field_name: field_name.upper()
    )

    age: int
    height: float
    kind: str


t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'})
print(t.model_dump(by_alias=True))
#> {'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'}

AliasGeneratorの使用

??? API「APIドキュメント」

[`pydantic.aliases.AliasGenerator`][pydantic.aliases.AliasGenerator]<br>

AliasGenerator 、モデルに複数のエイリアス ジェネレーターを指定できるクラスです。 AliasGenerator使用して、検証とシリアル化に異なるエイリアス ジェネレーターを指定できます。

これは、データのロードと保存に異なる命名規則を使用する必要があるが、フィールドごとに検証およびシリアル化のエイリアスを個別に指定したくない場合に特に便利です。

例えば:

from pydantic import AliasGenerator, BaseModel, ConfigDict


class Tree(BaseModel):
    model_config = ConfigDict(
        alias_generator=AliasGenerator(
            validation_alias=lambda field_name: field_name.upper(),
            serialization_alias=lambda field_name: field_name.title(),
        )
    )

    age: int
    height: float
    kind: str


t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'})
print(t.model_dump(by_alias=True))
#> {'Age': 12, 'Height': 1.2, 'Kind': 'oak'}

エイリアスの優先順位

Fieldalias指定すると、デフォルトで生成されたエイリアスよりも優先されます。

from pydantic import BaseModel, ConfigDict, Field


def to_camel(string: str) -> str:
    return ''.join(word.capitalize() for word in string.split('_'))


class Voice(BaseModel):
    model_config = ConfigDict(alias_generator=to_camel)

    name: str
    language_code: str = Field(alias='lang')


voice = Voice(Name='Filiz', lang='tr-TR')
print(voice.language_code)
#> tr-TR
print(voice.model_dump(by_alias=True))
#> {'Name': 'Filiz', 'lang': 'tr-TR'}

エイリアスの優先順位

この動作を変更するには、フィールドにalias_priority設定します。

  • alias_priority=2エイリアスはエイリアス ジェネレーターによってオーバーライドされ_ません_。
  • alias_priority=1エイリアスはエイリアス ジェネレーターによってオーバーライドされ_ます_。
  • alias_priority設定されていません:
    • エイリアスが設定されています。エイリアスはエイリアス ジェネレーターによってオーバーライドされ_ません_。
    • エイリアスが設定されていません。エイリアスはエイリアス ジェネレーターによってオーバーライドされ_ます_。

同じ優先順位がvalidation_aliasserialization_aliasに適用されます。さまざまなフィールド エイリアスの詳細については、 「フィールド エイリアス」を参照してください。


本文总阅读量