当另一个pydantic字段发生更改时,如何修改该字段?

2024-04-26 00:33:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pydantic类,例如:

from pydantic import BaseModel
class Programmer(BaseModel):
    python_skill: float
    stackoverflow_skill: float
    total_score: float = None

现在,我根据其他字段计算总分数:

@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


Tags: fromgetreturnfloatstackoverflow分数skillbasemodel
1条回答
网友
1楼 · 发布于 2024-04-26 00:33:59

您可以使用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,因此我建议更新

相关问题 更多 >