我有一个模型:
# 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):
我想对这个模型指定一些约束。 实际上,我需要对模型 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']
感谢您的帮助:)
答案 0 :(得分:3)
您可以使用 enum 中的 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
Pydantic 会自动将与枚举值匹配的任何字符串转换为正确的枚举实例,如果它不匹配任何内容,则会引发 ValidationError
。您可以将其与 Python 的 Optional
中的 Union
或 typing
结合使用,以使该字段成为可选字段或也允许其他类型(所有类型中的第一个匹配类型传递给 {{1} } 将被 Pydantic 使用,因此您可以使用 Union
创建一个“包罗万象”的场景。
答案 1 :(得分:1)
我找到了解决方案,
我使用 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