问题描述
我想根据特定条件动态分配字段数据类型。下面是我的模型:
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
可以通过type
类型because
Union
字段
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='')