Alias
Un alias est un nom alternatif pour un champ, utilisé lors de la sérialisation et de la désérialisation des données.
Vous pouvez spécifier un alias des manières suivantes:
alias
sur leField
- ça doit être une
str
- ça doit être une
validation_alias
sur leField
- peut être une instance de
str
,AliasPath
ouAliasChoices
- peut être une instance de
serialization_alias
sur leField
- ça doit être une
str
- ça doit être une
alias_generator
sur leConfig
- peut être un appelable ou une instance de
AliasGenerator
- peut être un appelable ou une instance de
Pour obtenir des exemples d'utilisation alias
, validation_alias
et serialization_alias
, consultez Alias de champ .
AliasPath
et AliasChoices
¶
Documentation API
Pydantic propose deux types spéciaux pour plus de commodité lors de l'utilisation validation_alias
: AliasPath
et AliasChoices
.
AliasPath
est utilisé pour spécifier un chemin d'accès à un champ à l'aide d'alias. Par exemple:
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'
- Nous utilisons
model_validate
pour valider un dictionnaire à l'aide des alias de champ.
Vous pouvez voir plus de détails sur model_validate
dans la référence de l'API.
Dans le champ 'first_name'
, nous utilisons l'alias 'names'
et l'index 0
pour spécifier le chemin d'accès au prénom. Dans le champ 'last_name'
, nous utilisons l'alias 'names'
et l'index 1
pour spécifier le chemin d'accès au nom de famille.
AliasChoices
est utilisé pour spécifier un choix d'alias. Par exemple:
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'
- Nous utilisons le deuxième choix d'alias pour les deux champs.
- Nous utilisons le premier choix d'alias pour le champ
'first_name'
et le deuxième choix d'alias pour le champ'last_name'
.
Vous pouvez également utiliser AliasChoices
avec 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'
Utiliser des générateurs d'alias¶
Vous pouvez utiliser le paramètre alias_generator
de Config
pour spécifier un appelable (ou un groupe d'appelables, via AliasGenerator
) qui générera des alias pour tous les champs d'un modèle. Ceci est utile si vous souhaitez utiliser une convention de dénomination cohérente pour tous les champs d'un modèle, mais que vous ne souhaitez pas spécifier l'alias de chaque champ individuellement.
!!! remarque Pydantic propose trois générateurs d'alias intégrés que vous pouvez utiliser immédiatement:
[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>
Utiliser un appelable¶
Voici un exemple de base utilisant un appelable:
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'}
Utiliser un AliasGenerator
¶
Documentation API
AliasGenerator
est une classe qui vous permet de spécifier plusieurs générateurs d'alias pour un modèle. Vous pouvez utiliser un AliasGenerator
pour spécifier différents générateurs d'alias pour la validation et la sérialisation.
Ceci est particulièrement utile si vous devez utiliser différentes conventions de dénomination pour charger et enregistrer des données, mais que vous ne souhaitez pas spécifier les alias de validation et de sérialisation pour chaque champ individuellement.
Par exemple:
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'}
Priorité des alias¶
Si vous spécifiez un alias
sur le Field
, il aura priorité sur l'alias généré par défaut:
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'}
Priorité des alias¶
Vous pouvez définir alias_priority
sur un champ pour modifier ce comportement:
alias_priority=2
l'alias ne sera pas remplacé par le générateur d'alias.alias_priority=1
l'alias sera remplacé par le générateur d'alias.alias_priority
non défini:- l'alias est défini: l'alias ne sera pas remplacé par le générateur d'alias.
- l'alias n'est pas défini: l'alias sera remplacé par le générateur d'alias.
La même priorité s'applique à validation_alias
et serialization_alias
. Pour en savoir plus sur les différents alias de champ, consultez la rubrique Alias de champ .
本文总阅读量次