背景
在开发过程中,由于上游数据结构不确定,或者数据结构确定,但大部分相同,部分字段不同(含义相同的情况)
如有时上游给到数据叫【id】,有时叫【code】,为了兼容这种情况,减少coding,我们可以通过Pydantic来解决该问题。
解决方案
旧版本处理方案
python
class Foo(BaseModel):
id: int =Field(..., alias="item_id")
field1: str
...
class Config:
allow_population_by_field_name = True
# 结果验证
Foo.parse_obj({"item_id": 123, "field1": "value1"})
Foo.parse_obj({"id": 234, "field1": "value1"})
新版本处理方案
参考官方
python
class Foo(BaseModel):
id: int =Field(..., alias="item_id")
field1: str
...
class Config:
populate_by_name = True
# 或者
class Foo(BaseModel):
model_config = ConfigDict(populate_by_name=True)
id: int =Field(..., alias="item_id")
field1: str
...
# 结果验证
Foo.model_validate({"item_id": 123, "field1": "value1"})
Foo.model_validate({"id": 234, "field1": "value1"})