विषय पर बढ़ें

विन्यास

Pydantic के व्यवहार को BaseModel.model_config के माध्यम से नियंत्रित किया जा सकता है, और TypeAdapter के तर्क के रूप में।

!!! नोट v2.0 से पहले, Config वर्ग का उपयोग किया गया था। यह अभी भी समर्थित है, लेकिन अस्वीकृत है

from pydantic import BaseModel, ConfigDict, ValidationError


class Model(BaseModel):
    model_config = ConfigDict(str_max_length=10)

    v: str


try:
    m = Model(v='x' * 20)
except ValidationError as e:
    print(e)
    """
    1 validation error for Model
    v
      String should have at most 10 characters [type=string_too_long, input_value='xxxxxxxxxxxxxxxxxxxx', input_type=str]
    """

इसके अलावा, आप कॉन्फ़िगरेशन विकल्पों को मॉडल क्लास क्वार्ग्स के रूप में निर्दिष्ट कर सकते हैं:

from pydantic import BaseModel, ValidationError


class Model(BaseModel, extra='forbid'):  # (1)!
    a: str


try:
    Model(a='spam', b='oh no')
except ValidationError as e:
    print(e)
    """
    1 validation error for Model
    b
      Extra inputs are not permitted [type=extra_forbidden, input_value='oh no', input_type=str]
    """
  1. अधिक विवरण के लिए अतिरिक्त विशेषताएँ अनुभाग देखें।

इसी प्रकार, यदि Pydantic से @dataclass डेकोरेटर का उपयोग किया जा रहा है:

from datetime import datetime

from pydantic import ConfigDict, ValidationError
from pydantic.dataclasses import dataclass

config = ConfigDict(str_max_length=10, validate_assignment=True)


@dataclass(config=config)
class User:
    id: int
    name: str = 'John Doe'
    signup_ts: datetime = None


user = User(id='42', signup_ts='2032-06-21T12:00')
try:
    user.name = 'x' * 20
except ValidationError as e:
    print(e)
    """
    1 validation error for User
    name
      String should have at most 10 characters [type=string_too_long, input_value='xxxxxxxxxxxxxxxxxxxx', input_type=str]
    """

मानक लाइब्रेरी या TypedDict से dataclass के साथ कॉन्फ़िगरेशन

यदि मानक लाइब्रेरी या TypedDict से dataclass उपयोग कर रहे हैं, तो आपको इसके बजाय __pydantic_config__ उपयोग करना चाहिए।

from dataclasses import dataclass
from datetime import datetime

from pydantic import ConfigDict


@dataclass
class User:
    __pydantic_config__ = ConfigDict(strict=True)

    id: int
    name: str = 'John Doe'
    signup_ts: datetime = None

वैकल्पिक रूप से, with_config डेकोरेटर का उपयोग टाइप चेकर्स के अनुपालन के लिए किया जा सकता है।

from typing_extensions import TypedDict

from pydantic import ConfigDict, with_config


@with_config(ConfigDict(str_to_lower=True))
class Model(TypedDict):
    x: str

वैश्विक स्तर पर व्यवहार बदलें

यदि आप विश्व स्तर पर पाइडेंटिक के व्यवहार को बदलना चाहते हैं, तो आप कस्टम model_config के साथ अपना स्वयं का कस्टम BaseModel बना सकते हैं क्योंकि कॉन्फ़िगरेशन विरासत में मिला है:

from pydantic import BaseModel, ConfigDict


class Parent(BaseModel):
    model_config = ConfigDict(extra='allow')


class Model(Parent):
    x: str


m = Model(x='foo', y='bar')
print(m.model_dump())
#> {'x': 'foo', 'y': 'bar'}

यदि आप Model क्लास में model_config जोड़ते हैं, तो यह Parent से model_config के साथ विलय हो जाएगा:

from pydantic import BaseModel, ConfigDict


class Parent(BaseModel):
    model_config = ConfigDict(extra='allow')


class Model(Parent):
    model_config = ConfigDict(str_to_lower=True)  # (1)!

    x: str


m = Model(x='FOO', y='bar')
print(m.model_dump())
#> {'x': 'foo', 'y': 'bar'}
print(m.model_config)
#> {'extra': 'allow', 'str_to_lower': True}

本文总阅读量