如何在 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 的基本方法!!