Создание схемы модели Pydanti c с помощью ключа Dynami c - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь реализовать Пиданти c Модели схем для следующих JSON.

{
    "description": "Best Authors And Their Books",
    "authorInfo":
    {
        "KISHAN":
            {
            "numberOfBooks": 10,
            "bestBookIds": [0, 2, 3, 7]
            },
        "BALARAM":
            {
            "numberOfBooks": 15,
            "bestBookIds": [10, 12, 14]
            },
        "RAM":
            {
            "numberOfBooks": 6,
            "bestBookIds": [3,5]

        }
    }
}

Вот объекты схемы в Пиданти c

from typing import List, Type, Dict
from pydantic import BaseModel

class AuhtorBookDetails(BaseModel):
    numberOfBooks: int
    bestBookIds: List[int]

class AuthorInfoCreate(BaseModel):
    __root__: Dict[str, Type[AuhtorBookDetails]]    
#pass

class ScreenCreate(BaseModel):
    description: str
    authorInfo: Type[AuthorInfoCreate]

Я анализирую AuthorInfoCreate следующим образом:

y = AuhtorBookDetails( numberOfBooks = 10, bestBookIds = [3,5])
print(y)
print(type(y))

x = AuthorInfoCreate.parse_obj({"RAM" : y})
print(x)

Я вижу следующую ошибку.

numberOfBooks=10 bestBookIds=[3, 5]

<class '__main__.AuhtorBookDetails'>

Traceback (most recent call last):

  File "test.py", line 44, in <module>

    x = AuthorInfoCreate.parse_obj({"RAM": y})

  File "C:\sources\mfrep-funds\env\lib\site-packages\pydantic\main.py", line 402, in parse_obj

    return cls(**obj)

  File "C:\sources\mfrep-funds\env\lib\site-packages\pydantic\main.py", line 283, in __init__

    raise validation_error

pydantic.error_wrappers.ValidationError: 1 validation error for AuthorInfoCreate

__root__ -> RAM

  subclass of AuhtorBookDetails expected (type=type_error.subclass; expected_class=AuhtorBookDetails)

Я хочу понять, как я могу изменить AuthorInfoCreate, чтобы у меня было json упомянутая схема.

...