1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Python] How to parse ObjectId in a pydantic model?

Discussão em 'Python' iniciado por Stack, Outubro 1, 2024 às 11:22.

  1. Stack

    Stack Membro Participativo

    I am trying to parse MongoDB records to a pydantic model but failing to do so for ObjectId

    From what I understood, I need to setup validator for ObjectId and did try to both extend ObjectId class and add the validator decorator to my class using ObjectId. which I did as follows.

    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')}


    Unfortunately, both "solution" are failing as follows:

    >>> test = User(**data)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    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 "<stdin>", line 1, in <module>
    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)


    There is definitely something that I am missing here.

    Continue reading...

Compartilhe esta Página