如何解决更改另一个字段时如何修改pydantic字段?
from pydantic import BaseModel
class Programmer(BaseModel):
python_skill: float
stackoverflow_skill: float
total_score: float = None
现在我正在根据其他字段计算 total_score:
@validator("total_score",always=True)
def calculat_total_score(cls,v,*,values):
return values.get("python_skill") + values.get("stackoverflow_skill")
这很好用,但现在当我改变一项技能时:
programmer = Programmer(python_skill=1.0,stackoverflow_skill=9.0)
print(programmer.total_score) # return 10.0
programmer.python_skill=2.0
print(programmer.total_score) # still return 10.0
有什么解决办法吗? TNX!!
解决方法
您可以为此使用 root validator。每次更新后都会调用它。像这样:
from pydantic import BaseModel,validator,root_validator
class Programmer(BaseModel):
python_skill: float
stackoverflow_skill: float
total_score: float = None
class Config:
validate_assignment = True
@root_validator
def calculate_total_score(cls,values):
values["total_score"] = values.get("python_skill") + values.get("stackoverflow_skill")
return values
programmer = Programmer(python_skill=1.0,stackoverflow_skill=9.0)
print(programmer.total_score) # 10.0
programmer.python_skill = 2.0
print(programmer.total_score) # 11.0
注意:在 1.7.3 之前的版本中有 bug,所以我建议更新
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。