Как сопоставить значения из вложенного dict в Pydantic Model?

Я пытаюсь сопоставить значение из вложенного dict / json в мою модель Pydantic. Для меня это хорошо работает, когда мой json / dict имеет плоскую структуру. Однако я изо всех сил пытаюсь отобразить значения из вложенной структуры в мою Pydantic Model.

Предположим, у меня есть json / dict в следующем формате:

d = {
"p_id": 1,
"billing": {
    "first_name": "test"
}

Кроме того, у меня есть модель Pydantic с двумя атрибутами:

class Order(BaseModel):
    p_id: int
    pre_name: str

Как я могу сопоставить значение ключа first_name с моим атрибутом Pydantic pre_name?

Есть ли простой способ вместо использования root_validator для синтаксического анализа данной структуры в моей плоской пидантической модели?


person azo91    schedule 10.03.2021    source источник


Ответы (1)


Вы можете настроить __init__ своего класса модели:

from pydantic import BaseModel

d = {
    "p_id": 1,
    "billing": {
        "first_name": "test"
    }
}


class Order(BaseModel):
    p_id: int
    pre_name: str

    def __init__(self, **kwargs):
        kwargs["pre_name"] = kwargs["billing"]["first_name"]
        super().__init__(**kwargs)


print(Order.parse_obj(d))  # p_id=1 pre_name='test'
person alex_noname    schedule 11.03.2021