Pydantic – изменение данных во вложенной модели перед проверкойPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pydantic – изменение данных во вложенной модели перед проверкой

Сообщение Anonymous »

У меня есть небольшой пример вложенного объекта с pydantic.

Код: Выделить всё

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)

Очевидно, это не удалось, поскольку тип не установлен в модели UserType. Моя цель состоит в том, чтобы каким-то образом установить каждый UserType.type, используя связанный ключ из словаря объектов, перед фактической проверкой. Что-то вроде:
  • Я передаю данные в модель
  • Модель проверяет основные ключи
    < li>Перед проверкой вложенных объектов он копирует ключ dict как ключ type = внутри данных, которые затем передаются в модель UserType
Возможно ли это каким-то образом с помощью pydantic?
Я знаю, что могу сделать все это перед передачей данных в основную модель, но я хочу знать, возможно ли это в модели 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)

Но этот метод выполняется после проверки, а проверка не удалась ранее. Также пытался установить некоторые фиктивные значения типа в полезных данных, а затем переопределить их в model_post_init(), но это вообще не сработало, и модель имела только исходные фиктивные значения для типа.


Подробнее здесь: https://stackoverflow.com/questions/783 ... validation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Pydantic: проверка вложенной модели
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Проверка вложенной модели Pydantic
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • C# Ошибка входа в систему с проверкой/проверкой текста
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Пользовательская инициализация с проверкой дочернего класса pydantic.BaseModel для частных атрибутов
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как десериализовать вложенные модели Pydantic из JSON, где вложенные модели хранятся в списке в вычисляемом поле.
    Anonymous » » в форуме Python
    0 Ответы
    116 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»