Код: Выделить всё
from typing import Dict
from pydantic import BaseModel, Field, ValidationError
class UserType(BaseModel):
name: str = Field(min_length=1)
type: str = Field(min_length=1)
class AppConfig(BaseModel):
key1: int = Field(gt=0)
objects: Dict[str, UserType]
try:
data = {
"key1": 1,
"objects": {
"type1": {
"name": "Name 2",
},
"type2": {
"name": "Name 1"
}
}
}
c = AppConfig(**data)
print(c.model_dump_json())
except ValidationError as e:
print(e)
- Я передаю данные в модель
- Модель проверяет основные ключи
< li>Перед проверкой вложенных объектов он копирует ключ dict как ключ type = внутри данных, которые затем передаются в модель UserType
Я знаю, что могу сделать все это перед передачей данных в основную модель, но я хочу знать, возможно ли это в модели pydantic.< /p>
Я также пробовал использовать метод model_post_init() следующим образом:
Код: Выделить всё
from typing import Dict
from pydantic import BaseModel, Field, ValidationError
class UserType(BaseModel):
name: str = Field(min_length=1)
type: str = Field(min_length=1)
class AppConfig(BaseModel):
key1: int = Field(gt=0)
objects: Dict[str, UserType]
def model_post_init(self, __context) -> None:
values = self.dict()
for obj_type, obj in values["objects"].items():
print(obj, obj_type)
obj["type"] = obj_type
try:
data = {
"key1": 1,
"objects": {
"type1": {
"name": "Name 2",
#"type": "t"
},
"type2": {
"name": "Name 1",
#"type": "t"
}
}
}
c = AppConfig(**data)
print(c.model_dump_json())
except ValidationError as e:
print(e)
Подробнее здесь: https://stackoverflow.com/questions/783 ... validation