MongoEngine의 Document를 dict, 또는 Pydantic으로 변환시, ObjectId 파싱이 제대로 되지 않는 문제가 있었다.
다음 문서를 보고 MongoEngine의 Document를 Pydantic으로 변환하기 위해 GetterDict 클래스를 구현해줬다.
https://docs.pydantic.dev/usage/models/#data-binding
from typing import Any
from bson import ObjectId
from pydantic import BaseModel
from pydantic.utils import GetterDict
class ModelGetter(GetterDict):
def get(self, key: Any, default: Any = None) -> Any:
value = self._obj.__getitem__(key)
if isinstance(value, ObjectId):
return str(value)
else:
return self._obj.__getitem__(key)
class ConfigBase(BaseModel):
class Config:
orm_mode = True
getter_dict = ModelGetter
GetterDict의 get은, 모든 필드를 순회하며 convert해준다. 이 때, ObjectId를 만나면 String으로 변환해주도록 만든 코드이다.
BaseModel의 orm_mode=True 는 from_orm() 메소드 사용을 가능하게 해준다.
'Backend > FastAPI' 카테고리의 다른 글
FastAPI에서 예외처리하기 (0) | 2022.10.17 |
---|