pydantic 类中的一些字段实际上是内部表示,而不是我想要序列化或放入模式中的内容。我正在尝试各种方法来排除它们,但似乎没有任何效果。
这是我使用
exclue=True
的
exclude_schema=True
和
Field
的一种方法
class MyItem(BaseModel):
name: str = Field(...)
data: str = Field(...)
class MyObject(BaseModel):
items_dict: dict[str, MyItem] = Field(..., exclude=True, exclude_schema=True)
@property
def items_list(self):
return list(self.items_dict.values())
@root_validator(pre=True)
@classmethod
def encode_decode_items(cls, values):
items = values.get('items_dict')
if isinstance(items, dict):
values['items_dict'] = list(items.values())
elif isinstance(items, list):
values['items_dict'] = validate_items(items)
return values
obj = MyObject(items_dict=[MyItem(name='item1', data='data1'), MyItem(name='item2', data='data2')])
print(json.dumps(obj.model_json_schema(), indent=2))
但是在模式中该字段仍然存在:
{
"$defs": {
"MyItem": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"data": {
"title": "Data",
"type": "string"
}
},
"required": [
"name",
"data"
],
"title": "MyItem",
"type": "object"
}
},
"properties": {
"items_dict": {
"additionalProperties": {
"$ref": "#/$defs/MyItem"
},
"exclude_schema": true,
"title": "Items Dict",
"type": "object"
}
},
"required": [
"items_dict"
],
"title": "MyObject",
"type": "object"
}
如果您希望从 JSON 架构中排除某个字段,请使用 SkipJsonSchema:
from pydantic.json_schema import SkipJsonSchema
from pydantic import BaseModel
class MyModel(BaseModel):
visible_in_sch: str
not_visible_in_sch: SkipJsonSchema[str]
您可以在docs中了解更多信息。