这里的上下文是我正在使用 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)