我正在尝试为以下JSON实现Pydantic模式模型
{
"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]
}
}
}
以下是Pydantic中的模式对象
from typing import List, Type, Dict
from pydantic import BaseModel
class AuthorBookDetails(BaseModel):
numberOfBooks: int
bestBookIds: List[int]
class AuthorInfoCreate(BaseModel):
__root__: Dict[str, Type[AuthorBookDetails]]
#pass
class ScreenCreate(BaseModel):
description: str
authorInfo: Type[AuthorInfoCreate]
我正在按如下方式解析AuthorInfo创建:
y = AuthorBookDetails( 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__.AuthorBookDetails'>
Traceback (most recent call last):
File "test.py", line 44, in <module>
x = AuthorInfoCreate.parse_obj({"RAM": y})
File "C:\sources\rep-funds\env\lib\site-packages\pydantic\main.py", line 402, in parse_obj
return cls(**obj)
File "C:\sources\rep-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 AuthorBookDetails expected (type=type_error.subclass; expected_class=AuthorBookDetails)
我想了解如何更改AuthorInfoCreate,以便获得提到的json模式
实际上,您应该从类型注释中删除类型。您需要类的实例,而不是实际的类。请尝试以下解决方案:
对于那些知道如何初始化Pydantic类的人,用@SKhalymon给出的答案
输出:
从pydantic issue #2100
这就是为什么不可能使用
在上述问题中提出了以下解决方法
现在可以用通常的方式使用
AuthorInfoCreate
模型了PR #2237应使上述解决方法变得不必要
相关问题 更多 >
编程相关推荐