带有 FastAPI 的 SQLModel:可编辑计算字段

问题描述 投票:0回答:1

我的 FastAPI 应用程序中有以下 SQLModel:

class MyModel(SQLModel):
     a: str

我想添加另一个字段

b
,该字段将具有基于模型创建中提供的
a
值的默认值。此
b
字段也必须在模型创建中可编辑。 我尝试使用
@computed_field
但它只允许自动生成值,而不能在模型创建中覆盖它。

b
字段应该类似于:

b: str = Field(default="option1" if len(a) > 5 else "option2")

模型创建应该是:

my_model = MyModel(a="abcde") 

获得:

MyModel(a="abcde", b="option2")

或:

my_model = MyModel(a="some_value", b="option3") 

获得:

 MyModel(a="some_value", b="option3")

如何在 SQLModel 中创建可编辑的计算字段?

python fastapi sqlmodel
1个回答
0
投票

您可以使用

model_validator
mode='before'
在创建模型之前检查模型的各个字段并进行相应修改。

from pydantic import BaseModel, model_validator
class Foo(BaseModel):
    a: str
    b: str

    @model_validator(mode='before')
    @classmethod
    def check_b(cls, data: Any) -> Any:
        if data.get('b'):
            return data
        data['b'] = "option1" if len(data.get('a')) > 5 else "option2"
        return data

print(Foo(a="abcde").model_dump())
#{'a': 'abcde', 'b': 'option2'}
print(Foo(a="abcdef").model_dump())
#{'a': 'abcdef', 'b': 'option1'}
print(Foo(a="some_value", b="option3").model_dump())
#{'a': 'some_value', 'b': 'option3'}
© www.soinside.com 2019 - 2024. All rights reserved.