I need default values to be cleared in a Pydantic model. I cannot recreate the object because, in my use case, it has references that need to be preserved. Could you please show me the best practices for this?
I need something like this example.
from pydantic import BaseModel, Field
class MyObject(BaseModel):
value: int = Field(default=1)
my_object = MyObject(value1=2)
# Reference to object, that need to be preserved
reference = [my_object]
# How to clear object to default values?
my_object.clear()
assert reference[0].value == 1
pydantic library provides just the right tools to do this with the BaseModel class.
What you have to do is to define your clear method to your class :
from pydantic import BaseModel, Field
def foo():
return 2
class MyObject(BaseModel):
value1: int = Field(default=1)
value2: Any = Field(default=foo())
...
def clear(self):
for field, field_info in self.model_fields.items():
if field_info.default_factory:
default_value = field_info.default_factory()
else:
default_value = field_info.default
setattr(self, field, default_value)
self.model_fields_set.clear()
What it does is :
all the above done without recreating an instance. Now
my_object = MyObject(value1=2)
# Reference to object, that need to be preserved
reference = [my_object]
# How to clear object to default values?
my_object.clear()
assert reference[0].value == 1
Shouldn't raise any error! Feel free to ask any question