【发布时间】:2020-07-22 18:20:45
【问题描述】:
我知道 Typescript 中的一个概念,称为可区分联合。这是您放置 2 个结构(类等)的地方,类型取决于结构的值。我正在尝试通过 Pydantic 验证在 FastAPI 中实现类似的功能。我可以收到两种不同的请求有效负载。是一个还是另一个取决于accountType 变量。如果是creative,它应该由RegistrationPayloadCreative 验证,如果它是brand,它应该由RegistrationPayloadBrand 验证。我如何实现这一目标?找不到其他解决方案。
问题是它要么返回
unexpected value; permitted: 'creative' (type=value_error.const; given=brand; permitted=('creative',))
或者它根本不起作用。
class RegistrationPayloadBase(BaseModel):
first_name: str
last_name: str
email: str
password: str
class RegistrationPayloadCreative(RegistrationPayloadBase):
accountType: Literal['creative']
class RegistrationPayloadBrand(RegistrationPayloadBase):
company: str
phone: str
vat: str
accountType: Literal['brand']
class A(BaseModel):
b: Union[RegistrationPayloadBrand, RegistrationPayloadCreative]
def main():
A(b={'first_name': 'sdf', 'last_name': 'sdf', 'email': 'sdf', 'password': 'sdfds', 'accountType': 'brand'})
if __name__ == '__main__':
main()
【问题讨论】:
标签: python validation fastapi python-typing pydantic