我找到了一些有关如何在BaseModel类中使用 ObjectId 的示例。基本上,这可以通过创建 Pydantic 友好的类来实现,如下所示:
class PyObjectId(ObjectId):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if not ObjectId.is_valid(v):
raise ValueError("Invalid objectid")
return ObjectId(v)
@classmethod
def __modify_schema__(cls, field_schema):
field_schema.update(type="string")
Run Code Online (Sandbox Code Playgroud)
然而,这似乎适用于 Pydantic v1,因为该机制已被__get_pydantic_core_schema__classmethod 取代。但是,我无法使用 Pydantic v2 实现等效的解决方案。有可能吗?我需要什么验证器?我尝试重构一些东西,但无法得到任何可用的东西。