विन्यास
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]
"""
- अधिक विवरण के लिए अतिरिक्त विशेषताएँ अनुभाग देखें।
इसी प्रकार, यदि 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}
本文总阅读量次