小编jsn*_*now的帖子

使用 Pydantic V2 和 model_validate,如何从不属于 Pydantic 模型一部分的 ORM 模型的属性创建“计算字段”

这里的上下文是我正在使用 FastAPI 并response_model为每个路径定义了一个。端点代码返回一个 SQLAlchemy ORM 实例,然后我相信该实例被传递到model_validate. 这response_model是一个 Pydantic 模型,它过滤掉许多 ORM 模型属性(内部 id 等)并执行一些转换并添加一些computed_fields。只要您需要的所有属性都是 Pydantic 模型的一部分,这一切就可以正常工作。似乎__pydantic_context__withmodel_config = ConfigDict(from_attributes=True, extra='allow')是保留 ORM 模型中的一些额外属性并使用它们来计算新字段的好方法,但是,when 似乎用于创建仍为空的model_validate实例。__pydantic_context__有什么技巧可以以干净的方式实现这种行为吗?

我有一种方法可以完成这项工作,但它涉及到向我的 ORM 模型动态添加新属性,这让我有一种不好的感觉,并且FIXME在我的代码中出现了很大的问题。

这是一些代码来说明问题。请注意,第二个测试用例失败。

from typing import Any
from pydantic import BaseModel, ConfigDict, computed_field, model_validator


class Foo:

    def __init__(self):
        self.original_thing = "foo"


class WishThisWorked(BaseModel):
    """
    __pydantic_extra__ does not pick up the additional attributes when model_validate is used to instantiate
    """
    model_config …
Run Code Online (Sandbox Code Playgroud)

python pydantic fastapi

6
推荐指数
1
解决办法
4346
查看次数

标签 统计

fastapi ×1

pydantic ×1

python ×1