![](/img/trans.png)
[英]How to parse a pydantic model with a field of type "Type" from json?
[英]pydantic model dynamic field data type
我想根據特定條件動態分配字段數據類型。 以下是我的模型:
class Connection(BaseModel):
name: str
# type can be GCS or ORACLE
type: str
details: GCSDetails/OracleDetails
class GCSDetails(BaseModel):
bucket: str
folderName: str
class OracleDetails(BaseModel):
host: str
port: int
user: str
那么,基於“類型”,即 GCS 或 ORACLE,我如何在驗證期間動態更改“詳細信息”數據類型?
Pydantic
可以通過Union
類型在不使用額外type
字段的情況下做到這一點,因為
pydantic將嘗試“匹配”在
Union
下定義的任何類型,並將使用第一個匹配的類型。
from typing import Union
from pydantic import BaseModel
class GCSDetails(BaseModel):
bucket: str
folderName: str
class OracleDetails(BaseModel):
host: str
port: int
user: str
class Connection(BaseModel):
name: str
# type can be GCS or ORACLE
type: str
details: Union[GCSDetails, OracleDetails]
test_gcs = {"name": "", "type": "GCS", "details": {"bucket": "", "folderName": ""}}
test_oracle = {"name": "", "type": "ORACLE", "details": {"host": "", "port": 15, "user": ""}}
print(Connection(**test_gcs))
print(Connection(**test_oracle))
輸出:
name='' type='GCS' details=GCSDetails(bucket='', folderName='')
name='' type='ORACLE' details=OracleDetails(host='', port=15, user='')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.