如何在 Pydantic return 模型 class 中创建 @root_validator 对象而不是值?
How to make @root_validator in Pydantic return model class object rather than values?
我目前在使用 Pydantic 的 FastAPI 项目中使用 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
的基本方法!!
我目前在使用 Pydantic 的 FastAPI 项目中使用 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
的基本方法!!