Pic*_*xyB 9 python pydantic fastapi
我有一个像这样的模型:
# Imports
from pydantic import BaseModel
# Data Models
class MyModel(BaseModel):
a: str
b: str
c: str
@app.post('/endpoint_to_post')
async def post_log(my_model: MyModel):
Run Code Online (Sandbox Code Playgroud)
我想对该模型指定一些约束。事实上,我需要对模型MyModel的字段C进行可能的值约束。
喜欢:
# Imports
from pydantic import BaseModel
# Data Models
class MyModel(BaseModel):
a: str
b: str
c: str in ['possible_value_1', 'possible_value_2']
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助 :)
Ome*_*aim 20
使用Literal https://peps.python.org/pep-0586/
from pydantic import BaseModel
from typing import Literal
# Data Models
class MyModel(BaseModel):
a: str
b: str
c: Literal['possible_value_1', 'possible_value_2']
Run Code Online (Sandbox Code Playgroud)
Gwy*_*idD 10
您可以使用Python stdlib中的枚举:
from enum import Enum
from pydantic import BaseModel
class CEnum(Enum):
VALUE_1 = 'possible_value_1'
VALUE_2 = 'possible_value_2'
# Data Models
class MyModel(BaseModel):
a: str
b: str
c: CEnum
Run Code Online (Sandbox Code Playgroud)
Pydantic 会自动将与枚举值匹配的任何字符串转换为正确的枚举实例,ValidationError如果不匹配任何内容,则会引发异常。您可以将它与Python 相结合,使该字段Optional成为可选字段,或者也允许其他类型(传递给的所有类型中的第一个匹配类型将由 Pydantic 使用,因此您可以使用 创建一个“catch-all”场景) 。UniontypingUnionUnion[CEnum, str]
我找到了一个解决方案,
我使用 pydantic.validator 来实现这一点。
例子:
# Imports
from pydantic import BaseModel, validator
# Data Models
class MyModel(BaseModel):
a: str
b: str
c: str # in ['possible_value_1', 'possible_value_2']
@validator('c')
def c_match(cls, v):
if not v in ['possible_value_1', 'possible_value_2']:
raise ValueError('c must be in [possible_value_1, possible_value_2]')
return v
Run Code Online (Sandbox Code Playgroud)
cf https://pydantic-docs.helpmanual.io/usage/validators/
| 归档时间: |
|
| 查看次数: |
11905 次 |
| 最近记录: |