Alias
Een alias is een alternatieve naam voor een veld, die wordt gebruikt bij het serialiseren en deserialiseren van gegevens.
U kunt op de volgende manieren een alias opgeven:
alias
op hetField
- moet een
str
zijn
- moet een
validation_alias
op hetField
- kan een exemplaar zijn van
str
,AliasPath
ofAliasChoices
- kan een exemplaar zijn van
serialization_alias
op hetField
- moet een
str
zijn
- moet een
alias_generator
op deConfig
- kan een opvraagbare versie zijn of een exemplaar van
AliasGenerator
- kan een opvraagbare versie zijn of een exemplaar van
Zie Veldaliassen voor voorbeelden van het gebruik van alias
, validation_alias
en serialization_alias
.
AliasPath
en AliasChoices
¶
API-documentatie
Pydantic biedt twee speciale typen voor het gemak bij het gebruik van validation_alias
: AliasPath
en AliasChoices
.
Het AliasPath
wordt gebruikt om een pad naar een veld op te geven met behulp van aliassen. Bijvoorbeeld:
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'
- We gebruiken
model_validate
om een woordenboek te valideren met behulp van veldaliassen.
U kunt meer details over model_validate
bekijken in de API-referentie.
In het veld 'first_name'
gebruiken we de alias 'names'
en de index 0
om het pad naar de voornaam op te geven. In het veld 'last_name'
gebruiken we de alias 'names'
en de index 1
om het pad naar de achternaam op te geven.
AliasChoices
wordt gebruikt om een keuze aan aliassen op te geven. Bijvoorbeeld:
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'
- We gebruiken de tweede aliaskeuze voor beide velden.
- We gebruiken de eerste aliaskeuze voor het veld
'first_name'
en de tweede aliaskeuze voor het veld'last_name'
.
U kunt AliasChoices
ook gebruiken met 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'
Het gebruik van aliasgeneratoren¶
U kunt de parameter alias_generator
van Config
gebruiken om een opvraagbare (of groep van opvraagbare waarden, via AliasGenerator
) op te geven die aliassen genereert voor alle velden in een model. Dit is handig als u een consistente naamgevingsconventie voor alle velden in een model wilt gebruiken, maar niet voor elk veld afzonderlijk de alias wilt opgeven.
!!! opmerking Pydantic biedt drie ingebouwde aliasgeneratoren die u kant-en-klaar kunt gebruiken:
[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>
Met behulp van een oproepbaar¶
Hier is een eenvoudig voorbeeld met behulp van een callable:
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'}
Een AliasGenerator
gebruiken¶
API-documentatie
AliasGenerator
is een klasse waarmee u meerdere aliasgeneratoren voor een model kunt opgeven. U kunt een AliasGenerator
gebruiken om verschillende aliasgeneratoren op te geven voor validatie en serialisatie.
Dit is met name handig als u verschillende naamgevingsconventies moet gebruiken voor het laden en opslaan van gegevens, maar u de validatie- en serialisatie-aliassen niet voor elk veld afzonderlijk wilt opgeven.
Bijvoorbeeld:
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'}
Aliasvoorrang¶
Als u een alias
opgeeft in Field
, heeft deze standaard voorrang op de gegenereerde 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'}
Aliasprioriteit¶
U kunt alias_priority
voor een veld instellen om dit gedrag te wijzigen:
alias_priority=2
de alias wordt niet overschreven door de aliasgenerator.alias_priority=1
de alias wordt overschreven door de aliasgenerator.alias_priority
niet ingesteld:- alias is ingesteld: de alias wordt niet overschreven door de aliasgenerator.
- alias is niet ingesteld: de alias wordt overschreven door de aliasgenerator.
Dezelfde prioriteit geldt voor validation_alias
en serialization_alias
. Zie meer over de verschillende veldaliassen onder veldaliassen .
本文总阅读量次