Alias
Alias adalah nama alternatif untuk suatu bidang, digunakan saat membuat serialisasi dan deserialisasi data.
Anda dapat menentukan alias dengan cara berikut:
alias
diField
- harus
str
- harus
validation_alias
diField
- dapat berupa turunan dari
str
,AliasPath
, atauAliasChoices
- dapat berupa turunan dari
serialization_alias
diField
- harus
str
- harus
alias_generator
diConfig
- dapat berupa callable atau turunan dari
AliasGenerator
- dapat berupa callable atau turunan dari
Untuk contoh cara menggunakan alias
, validation_alias
, dan serialization_alias
, lihat Alias bidang .
AliasPath
dan AliasChoices
¶
Dokumentasi API
Pydantic menyediakan dua tipe khusus untuk kenyamanan saat menggunakan validation_alias
: AliasPath
dan AliasChoices
.
AliasPath
digunakan untuk menentukan jalur ke bidang menggunakan alias. Misalnya:
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'
- Kami menggunakan
model_validate
untuk memvalidasi kamus menggunakan alias bidang.
Anda dapat melihat detail lebih lanjut tentang model_validate
di referensi API.
Di bidang 'first_name'
, kami menggunakan alias 'names'
dan indeks 0
untuk menentukan jalur ke nama depan. Di kolom 'last_name'
, kami menggunakan alias 'names'
dan indeks 1
untuk menentukan jalur ke nama belakang.
AliasChoices
digunakan untuk menentukan pilihan alias. Misalnya:
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'
- Kami menggunakan pilihan alias kedua untuk kedua bidang.
- Kami menggunakan pilihan alias pertama untuk bidang
'first_name'
dan pilihan alias kedua untuk bidang'last_name'
.
Anda juga dapat menggunakan AliasChoices
dengan 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'
Menggunakan generator alias¶
Anda dapat menggunakan parameter alias_generator
dari Config
untuk menentukan callable (atau grup callable, melalui AliasGenerator
) yang akan menghasilkan alias untuk semua bidang dalam model. Ini berguna jika Anda ingin menggunakan konvensi penamaan yang konsisten untuk semua bidang dalam model, namun tidak ingin menentukan alias untuk setiap bidang satu per satu.
!!! catatan Pydantic menawarkan tiga generator alias bawaan yang dapat Anda gunakan langsung:
[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>
Menggunakan callable¶
Berikut ini contoh dasar menggunakan 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'}
Menggunakan AliasGenerator
¶
Dokumentasi API
AliasGenerator
adalah kelas yang memungkinkan Anda menentukan beberapa generator alias untuk suatu model. Anda dapat menggunakan AliasGenerator
untuk menentukan generator alias yang berbeda untuk validasi dan serialisasi.
Hal ini sangat berguna jika Anda perlu menggunakan konvensi penamaan yang berbeda untuk memuat dan menyimpan data, namun Anda tidak ingin menentukan alias validasi dan serialisasi untuk setiap bidang satu per satu.
Misalnya:
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'}
Alias Diutamakan¶
Jika Anda menentukan alias
pada Field
, maka secara default akan diutamakan daripada alias yang dihasilkan:
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'}
Prioritas Alias¶
Anda dapat menyetel alias_priority
pada suatu bidang untuk mengubah perilaku ini:
alias_priority=2
alias tidak akan ditimpa oleh generator alias.alias_priority=1
alias akan ditimpa oleh generator alias.alias_priority
tidak disetel:- alias disetel: alias tidak akan ditimpa oleh generator alias.
- alias tidak disetel: alias akan ditimpa oleh generator alias.
Prioritas yang sama berlaku untuk validation_alias
dan serialization_alias
. Lihat lebih lanjut tentang berbagai alias bidang di bawah alias bidang .
本文总阅读量次