Насколько я понял, мне нужно настроить валидатор для ObjectId и попытался расширить класс ObjectId и добавить декоратор validator в мой класс, используя ObjectId. что я сделал следующим образом.
Код: Выделить всё
from pydantic import BaseModel, validator
from bson.objectid import ObjectId
class ObjectId(ObjectId):
pass
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if not isinstance(v, ObjectId):
raise TypeError('ObjectId required')
return str(v)
class User(BaseModel):
who: ObjectId
class User1(BaseModel):
who: ObjectId
@validator('who')
def validate(cls, v):
if not isinstance(v, ObjectId):
raise TypeError('ObjectId required')
return str(v)
data = {"who":ObjectId('123456781234567812345678')}
Код: Выделить всё
>>> test = User(**data)
Traceback (most recent call last):
File "", line 1, in
File "pydantic/main.py", line 274, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for User
id
field required (type=value_error.missing)
Код: Выделить всё
>>> test = User1(**data)
Traceback (most recent call last):
File "", line 1, in
File "pydantic/main.py", line 274, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for User1
who
ObjectId required (type=type_error)
Подробнее здесь: https://stackoverflow.com/questions/595 ... ntic-model