我目前在 FastAPI 项目中使用 Pydantic 使用 root_validator,如下所示:
class User(BaseModel):
id: Optional[int]
name: Optional[str]
@root_validator
def validate(cls, values):
if not values.get("id") and not values.get("name"):
raise ValueError("It's an error")
return values
问题是,当我在 FastAPI 中查询请求正文时,因为 return values
,而不是类型为 class User
的请求正文,它只是一个简单的Python字典。如何获得 class User
类型的相同对象?
所以最初,当我打印它时,我的请求正文会这样: id=0 name='string'
(这就是我想要的)(当我打印它的 type()
时,它显示: <class 'User'>
)
这是 return values
的样子:{"id":0, "name"="string"}
我尝试将其设置为 return cls
,但这就是我打印它时的样子:<class 'User'>
(当我打印它的 type()
时,它显示: <class 'pydantic.main.ModelMetaclass'>
)
如何获得我的解决方案?
最佳答案
我在 FastAPI 和 Pydantic 讨论中提出了这个问题。并在社区成员这里找到了答案:https://github.com/tiangolo/fastapi/discussions/4563
解决方案是将 def validate
函数重命名为 def validate_all_fields
等其他名称
原因是 validate
是 Pydantic 中 BaseModel
的基本方法!!
关于python - 如何使 Pydantic 中的 @root_validator 返回模型类对象而不是值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71095764/