Search code examples
pydantic

How to get dict without Url(...) on pydantic model.model_dump()?


this is my code:

from pydantic import (
    BaseModel,
    HttpUrl,
)


class MyModel(BaseModel):
    url: HttpUrl


model = MyModel(url="https://io.com")
print(f"model_dump: {model.model_dump()}")
print(f'model_dump_json: "{model.model_dump_json()}"')

Result:

model_dump: {'url': Url('https://io.com/')}
model_dump_json: "{"url":"https://io.com/"}"

Model_dump_json() gives me a string.

How to get dict without Url(...) on pydantic model.model_dump()?

Thanks

I can use json.loads(model.model_dump_json()), but it is not normal.


Solution

  • You can use field_serializer:

    from typing import Any
    
    from pydantic import (
        BaseModel,
        HttpUrl,
        field_serializer,
        FieldSerializationInfo
    )
    
    
    class MyModel(BaseModel):
        url: HttpUrl
    
        @field_serializer("url")
        def ser_url(self, value: Any, info: FieldSerializationInfo):
            return str(value)
    
    
    model = MyModel(url="https://io.com")
    print(f"model_dump: {model.model_dump()}")
    print(f'model_dump_json: "{model.model_dump_json()}"')
    

    Output:

    model_dump: {'url': 'https://io.com/'}
    model_dump_json: "{"url":"https://io.com/"}"