Aller au contenu

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:

Pour obtenir des exemples d'utilisation alias , validation_alias et serialization_alias , consultez Alias de champ .

AliasPath et AliasChoices

Documentation API

pydantic.aliases.AliasPath
pydantic.aliases.AliasChoices

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'
  1. 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'
  1. Nous utilisons le deuxième choix d'alias pour les deux champs.
  2. 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

pydantic.aliases.AliasGenerator

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 .


本文总阅读量