我使用pydantic来建模对象,然后将其序列化为json并持久化到mongodb中。为了更好地封装,我希望某些字段是私有的,但我仍然希望在保存到mongodb时将其序列化为json,然后在从db获取对象时从json反序列化回来
如何才能做到这一点?
示例型号:
class MyModel(BaseModel):
public_field: str
_creation_time: str
def __init__(self, public_field: str):
super().__init__(public_field=public_field,
_creation_time=str(datetime.now()))
model = MyModel(public_field='foo')
json_str = model.json()
print(json_str)
此代码的输出为:
{"public_field": "foo"}
我希望它是这样的:
{"public_field": "foo", "_creation_time": "2023-03-03 09:43:47.796720"}
然后还能够将上面的JSON反序列化回填充了私有字段的状态
1条答案
按热度按时间bxjv4tth1#
Pydantic并不喜欢这些私有字段,默认情况下它会忽略值,并且对设置哪些字段非常严格。
一种解决方法是允许将字段添加为Extra(尽管这将允许添加多个字段)。
以下代码的工作方式与您预期的相同:
注意,因为字段本身被忽略了,所以设置
Field(default_factory=...)
将不起作用,因此您只能使用更笨拙的__init__
方法,