python - 如何使 Pydantic 中的 @root_validator 返回模型类对象而不是值?

标签 python fastapi pydantic

我目前在 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/

相关文章:

python - 如何使用 anchor 将 pydantic 模型导出到 yaml?

python - 如何在 FastAPI 中禁用模式检查?

python - OAuth 2 和用于发布图像的 Slack API

python - jupyter notebook - 检查魔法是否可用

python - 如何在 FastAPI 中接收图像和 json 数据?

python - FastAPI 处理和重定向 404

python - FastAPI:如何访问依赖项内的 APIRoute 对象

python - 对象属性的最大函数

python - 尽管网络很大、样本量很小并且数据经过预处理,但 Tensorflow LSTM 仍无法学习

python - 使用 pydantic json_decoders 解析不同的时间格式没有按预期工作