添加对新数据类型(quantiphy.Quantity)的支持

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

我有一个 Pydantic 模型,其中包含自定义数据 tpye(特别是

quantiphy.Quantity
):

from pydantic import BaseModel

class SpecLimit(BaseModel):
    label: str
    minimum: Quantity | None = None
    maximum: Quantity | None = None
    typical: Quantity | None = None
    is_informative: bool = False

我希望 Pydantic 将

Quantity
对象序列化为字符串(并从字符串中反序列化它们),但我不知道如何实现。我总是最终得到:
pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for <class 'quantiphy.quantiphy.Quantity'>...

我尝试指定

json_encoder
,但这不起作用,并且
json_encoders
属性已弃用。

from pydantic import BaseModel as _BaseModel
from quantiphy import Quantity


class BaseModel(_BaseModel):
    class Config:
        json_encoders = {
            Quantity: str,
        }

class SpecLimit(BaseModel):
    label: str
    minimum: Quantity | None = None
    maximum: Quantity | None = None
    typical: Quantity | None = None
    is_informative: bool = False
python pydantic
1个回答
0
投票

Pydantic 模块的一大特色是,当您尝试使用

BaseModel
spec_limit.dict()
(对于较新的 pydantic 版本)将
spec_limit.model_dump()
类转换为字典时,pydantic 类
spec_limit
会将自身转换为字典 递归 ,这意味着您也可以将内部类
Quantity
设为 pydantic 基础模型,并且它会起作用。

请注意,如果在

Quantity
类中您有更多自定义类,它们也需要是 pydantic 基础模型。

所以这个问题的一般解决方案是:

class CustomizedClass(BaseModel):
    # some data...

class MyBaseModelClass(BaseModel):
    data: CustomizedClass

# Can use the dictionary for json format
MyBaseModelClass.model_dump()
© www.soinside.com 2019 - 2024. All rights reserved.