如何在Pydantic模型的model_dump()中获取不含Url(...)的字典?
用Pydantic的model_dump()直接获取纯URL字符串的字典
当你用HttpUrl作为模型字段类型时,默认调用model_dump()会返回Url对象而非纯字符串,想要直接拿到包含字符串URL的字典,有两种简单方法:
方法1:使用mode='json'参数(推荐)
直接给model_dump()传入mode='json'参数,它会按照JSON序列化的规则输出字典,自动把HttpUrl转换成对应的字符串格式:
from pydantic import BaseModel, HttpUrl class MyModel(BaseModel): url: HttpUrl model = MyModel(url="https://io.com") print(f"model_dump(mode='json'): {model.model_dump(mode='json')}")
执行结果:
model_dump(mode='json'): {'url': 'https://io.com/'}
方法2:自定义字段序列化(适合特殊场景)
如果需要更个性化的处理,可以给字段加序列化器,把Url对象转成字符串:
from pydantic import BaseModel, HttpUrl, field_serializer class MyModel(BaseModel): url: HttpUrl @field_serializer('url') def serialize_url(self, value: HttpUrl) -> str: return str(value) model = MyModel(url="https://io.com") print(f"model_dump(): {model.model_dump()}")
执行结果:
model_dump(): {'url': 'https://io.com/'}
第一种方法是最优解,不用额外写自定义逻辑,直接复用Pydantic内置的JSON序列化逻辑,简单高效。
内容的提问来源于stack exchange,提问作者Andrey Dmitriev
相关产品推荐
相关产品推荐

