我必须从一个包含一些无效语法键的JSON对象中建模一个pydantic类.
举个例子:
example = {
"$type": "Menu",
"name": "lunch",
"children": [
{"$type": "Pasta", "title": "carbonara"},
{"$type": "Meat", "is_vegetable": false},
]
}
我的无聊课程目前看起来是这样的:
class Pasta(BaseModel):
title: str
class Meat(BaseModel):
is_vegetable: bool
class Menu(BaseModel):
name: str
children: list[Pasta | Meat]
现在,这项工作除了$type
场.如果字段名为"dollar_type",我将简单地创建以下TranslationModel
基类,并让Pasta
、Meat
和Menu
继承TranslationModel
:
class TranslationModel(BaseModel):
@computed_field
def dollar_type(self) -> str:
return self.__class__.__name__
所以通过执行Menu(**example).model_dump()
,我就得到了
{
'dollar_type': 'Menu',
'name': 'lunch',
'children': [
{'dollar_type': 'Pasta', 'title': 'carbonara'},
{'dollar_type': 'Meat', 'is_vegetable': False}
]
}
但遗憾的是,我必须严格遵循原始的json struct ,所以我必须使用$type
.
我已经按照文档使用了alias
和model_validator
,但没有成功.
我怎么能解决这个问题呢? 提前谢谢你