विषय पर बढ़ें

उपनाम

उपनाम किसी फ़ील्ड के लिए एक वैकल्पिक नाम है, जिसका उपयोग डेटा को क्रमबद्ध और डीसेरिएलाइज़ करते समय किया जाता है।

आप निम्नलिखित तरीकों से उपनाम निर्दिष्ट कर सकते हैं:

  • Field पर alias
    • एक str होना चाहिए
  • [Field] पर validation_alias [pydantic.fields.Field]
  • [Field] पर serialization_alias [pydantic.fields.Field]
    • एक str होना चाहिए
  • Config पर alias_generator
    • कॉल करने योग्य या AliasGenerator का उदाहरण हो सकता है

alias , validation_alias और serialization_alias उपयोग कैसे करें के उदाहरणों के लिए, फ़ील्ड उपनाम देखें।

AliasPath और AliasChoices

??? एपीआई "एपीआई दस्तावेज़ीकरण"

[`pydantic.aliases.AliasPath`][pydantic.aliases.AliasPath]<br>
[`pydantic.aliases.AliasChoices`][pydantic.aliases.AliasChoices]<br>

validation_alias उपयोग करते समय पाइडेंटिक सुविधा के लिए दो विशेष प्रकार प्रदान करता है: AliasPath और AliasChoices

AliasPath उपयोग उपनामों का उपयोग करके किसी फ़ील्ड के लिए पथ निर्दिष्ट करने के लिए किया जाता है। उदाहरण के लिए:

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. हम फ़ील्ड उपनामों का उपयोग करके एक शब्दकोश को सत्यापित करने के लिए model_validate उपयोग कर रहे हैं।

आप एपीआई संदर्भ में model_validate के बारे में अधिक विवरण देख सकते हैं।

'first_name' फ़ील्ड में, हम पहले नाम का पथ निर्दिष्ट करने के लिए उपनाम 'names' और अनुक्रमणिका 0 का उपयोग कर रहे हैं। 'last_name' फ़ील्ड में, हम अंतिम नाम का पथ निर्दिष्ट करने के लिए उपनाम 'names' और अनुक्रमणिका 1 का उपयोग कर रहे हैं।

उपनामों की पसंद को निर्दिष्ट करने के लिए AliasChoices का उपयोग किया जाता है। उदाहरण के लिए:

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. हम दोनों क्षेत्रों के लिए दूसरे उपनाम विकल्प का उपयोग कर रहे हैं।
  2. हम 'first_name' फ़ील्ड के लिए पहले उपनाम विकल्प का उपयोग कर रहे हैं और 'last_name' फ़ील्ड के लिए दूसरे उपनाम विकल्प का उपयोग कर रहे हैं।

आप AliasPath के साथ भी AliasChoices उपयोग कर सकते हैं:

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'

उपनाम जनरेटर का उपयोग करना

आप एक कॉल करने योग्य (या कॉल करने योग्य वस्तुओं का समूह, AliasGenerator के माध्यम से) निर्दिष्ट करने के लिए Config के alias_generator पैरामीटर का उपयोग कर सकते हैं जो एक मॉडल में सभी फ़ील्ड के लिए उपनाम उत्पन्न करेगा। यह उपयोगी है यदि आप किसी मॉडल में सभी फ़ील्ड के लिए एक सुसंगत नामकरण परंपरा का उपयोग करना चाहते हैं, लेकिन प्रत्येक फ़ील्ड के लिए अलग-अलग उपनाम निर्दिष्ट नहीं करना चाहते हैं।

!!! नोट पाइडेंटिक तीन अंतर्निहित उपनाम जेनरेटर प्रदान करता है जिन्हें आप बॉक्स से बाहर उपयोग कर सकते हैं:

[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>

कॉल करने योग्य का उपयोग करना

कॉल करने योग्य का उपयोग करके यहां एक बुनियादी उदाहरण दिया गया है:

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'}

AliasGenerator उपयोग करना

??? एपीआई "एपीआई दस्तावेज़ीकरण"

[`pydantic.aliases.AliasGenerator`][pydantic.aliases.AliasGenerator]<br>

AliasGenerator एक वर्ग है जो आपको एक मॉडल के लिए एकाधिक उपनाम जेनरेटर निर्दिष्ट करने की अनुमति देता है। आप सत्यापन और क्रमबद्धता के लिए अलग-अलग उपनाम जनरेटर निर्दिष्ट करने के लिए AliasGenerator उपयोग कर सकते हैं।

यह विशेष रूप से उपयोगी है यदि आपको डेटा लोड करने और सहेजने के लिए अलग-अलग नामकरण परंपराओं का उपयोग करने की आवश्यकता है, लेकिन आप प्रत्येक फ़ील्ड के लिए अलग-अलग सत्यापन और क्रमांकन उपनाम निर्दिष्ट नहीं करना चाहते हैं।

उदाहरण के लिए:

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'}

उपनाम प्राथमिकता

यदि आप Field पर एक 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'}

उपनाम प्राथमिकता

इस व्यवहार को बदलने के लिए आप किसी फ़ील्ड पर alias_priority सेट कर सकते हैं:

  • alias_priority=2 उपनाम को उपनाम जनरेटर द्वारा ओवरराइड नहीं किया जाएगा।
  • alias_priority=1 उपनाम को उपनाम जनरेटर द्वारा ओवरराइड किया जाएगा
  • alias_priority सेट नहीं:
    • उपनाम सेट है: उपनाम को उपनाम जनरेटर द्वारा ओवरराइड नहीं किया जाएगा।
    • उपनाम सेट नहीं है: उपनाम को उपनाम जनरेटर द्वारा ओवरराइड किया जाएगा

यही प्राथमिकता validation_alias और serialization_alias पर भी लागू होती है। फ़ील्ड उपनाम के अंतर्गत विभिन्न फ़ील्ड उपनामों के बारे में और देखें।


本文总阅读量