让pydantic对象dict()方法返回非pydantic类型的自定义表示



我有一个pydantic对象,它有一些属性是自定义类型。我能够创建验证器,以便pydantic可以验证此类型,但是我想在调用pydantic dict()方法时获得对象的字符串表示形式。下面是一个例子:

class MongoId(ObjectId):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if isinstance(v, str):
return ObjectId(v)
if not isinstance(v, ObjectId):
raise ValueError("Invalid ObjectId")
return v

class User(BaseModel):
uid: MongoId
user = User(...)

当我调用user.dict()时,我想获得uid属性的字符串表示形式,而不是该属性的对象表示形式。

我试着让自定义类型继承BaseModel类,然后实现dict()方法内部希望它会重载它,但它似乎没有被调用

这里也在讨论一个类似的问题:https://github.com/pydantic/pydantic/issues/1409

一个解决办法:

  1. 为类型创建JSON序列化
class User(BaseModel):
class Config:
json_encoders = {
# custom output conversion for your type
MongoId: lambda mid: str(mid)
}
  1. 运行以下命令
user = User(...)
user_as_dict = json.loads(user.json())

相关内容

  • 没有找到相关文章