Lewati ke isi

Alias

Alias adalah nama alternatif untuk suatu bidang, digunakan saat membuat serialisasi dan deserialisasi data.

Anda dapat menentukan alias dengan cara berikut:

Untuk contoh cara menggunakan alias , validation_alias , dan serialization_alias , lihat Alias bidang .

AliasPath dan AliasChoices

Dokumentasi API

pydantic.aliases.AliasPath
pydantic.aliases.AliasChoices

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'
  1. 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'
  1. Kami menggunakan pilihan alias kedua untuk kedua bidang.
  2. 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

pydantic.aliases.AliasGenerator

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 .


本文总阅读量