python - pydantic 中有 post_load 吗?

标签 python pydantic

以前我用过marshmallow带 Flask 的库。前段时间我用 Pydantic 尝试过 FastAPI .第一眼 pydantic似乎类似于 masrhmallow但仔细观察,它们有所不同。对我来说,它们之间的主要区别是 post_load来自 marshmallow 的方法.我在 pydantic 中找不到任何类似物.post_load是后处理方法的装饰器。使用它我可以自己处理返回对象,可以为所欲为:

class ProductSchema(Schema):
    alias = fields.Str()
    category = fields.Str()
    brand = fields.Str()

    @post_load
    def check_alias(self, params, **kwargs):
        """One of the fields must be filled"""
        if not any([params.get('alias'), params.get('category'), params.get('brand')]):
            raise ValidationError('No alias provided', field='alias')
        return params
此外它不仅用于验证。代码示例仅供视觉理解,请勿分析,我刚发明。
所以我的问题是:post_load有类似的吗?在 pydantic ?

最佳答案

是的,您可以使用 Pydantic 的 @validator decorator进行预加载、后加载、模型验证等。
这是一个后加载示例

from pydantic import validator

class Person(BaseModel):
    first_name: str
    second_name: str

    @validator("first_name")
    def make_it_formal(cls, first_name):
        return f"Mr. {first_name.capitalize()}"



p = Person(first_name="egvo", second_name="Example")

p.first_name
Out: Mr. Egvo

关于python - pydantic 中有 post_load 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63597239/

相关文章:

python - 如何使用 FastAPI 上传文件和 JSON 数据?

python - 自定义 JSON 编码器不适用于嵌套模型

python - 在 python Elasticsearch 中滚动不起作用

python - 按位置将函数数组应用于元素数组

python - 一次性计算发电机的统计数据。 Python

python - 在 sqlalchemy 中外部连接两个表时按问题排序

python - 如何让 Pylance 理解 Pydantic 的 `allow_population_by_field_name` 初始化器?

python - 如何检查对象在列表理解中是否不是 None?

python - pydantic.error_wrappers.ValidationError : value is not a valid list (type=type_error. 列表)

python - 如何使用 Pydantic 解析模型列表