別名
エイリアスはフィールドの代替名で、データをシリアル化および逆シリアル化するときに使用されます。
次の方法でエイリアスを指定できます。
Field
のalias
str
である必要があります
Field
のvalidation_alias
str
、AliasPath
、またはAliasChoices
のインスタンスにすることができます。
Field
のserialization_alias
str
である必要があります
Config
のalias_generator
- 呼び出し可能なもの、または
AliasGenerator
のインスタンスにすることができます。
- 呼び出し可能なもの、または
alias
、 validation_alias
、およびserialization_alias
の使用例については、 「フィールド エイリアス」を参照してください。
AliasPath
とAliasChoices
¶
??? API「APIドキュメント」
[`pydantic.aliases.AliasPath`][pydantic.aliases.AliasPath]<br>
[`pydantic.aliases.AliasChoices`][pydantic.aliases.AliasChoices]<br>
Pydantic は、 validation_alias
使用する際の利便性のために、 AliasPath
とAliasChoices
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'
- フィールド エイリアスを使用して辞書を検証するために、
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'
- 両方のフィールドに 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'
エイリアスジェネレーターの使用¶
Config
のalias_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'}
エイリアスの優先順位¶
Field
でalias
指定すると、デフォルトで生成されたエイリアスよりも優先されます。
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_alias
とserialization_alias
に適用されます。さまざまなフィールド エイリアスの詳細については、 「フィールド エイリアス」を参照してください。
本文总阅读量次