我的 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 中创建可编辑的计算字段?
您可以使用
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'}