我有一个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
一个解决办法:
- 为类型创建JSON序列化
class User(BaseModel):
class Config:
json_encoders = {
# custom output conversion for your type
MongoId: lambda mid: str(mid)
}
- 运行以下命令
user = User(...)
user_as_dict = json.loads(user.json())