Как задать время создания экземпляра BaseModel в pydantic
Распаршиваю json в BaseModel от pydantic. Нужен элегантный способ задать время создания экземпляра класса. Пока на уме только опциональное поле и доп метод, но выглядит как костыль.
class Test(BaseModel):
name: str
create_time: Optional[datetime]
def set_create_time(self) -> None:
self.create_time = datetime.now()
Update:
Данный костыль можно усовершенствовать, чтобы вызов не переносить на отдельную строку.
class Test(BaseModel):
name: str
create_time: Optional[datetime]
def set_create_time(self) -> BaseModel:
self.create_time = datetime.now()
return self
Т.е.
test = Test.parse_obj(data).set_create_time()
Вместо
test = Test.parse_obj(data)
test.set_create_time()
Ответы (1 шт):
Автор решения: Andrey Martynov
→ Ссылка
Предлагаю использовать model_post_init() - метод, выполняющийся при создании экземпляра класса после стандартного __init__()
Ниже - пример для часового пояса UTC:
class Test(BaseModel):
name: str
create_time: Optional[datetime]
def model_post_init(self, __context: Any) -> None:
self.create_time = datetime.now(UTC)