如何在FastAPI中使用Pydantic字段设置范围和超出范围的值?

5

我有以下代码:

item: Optional[int] = Field(None, ge=1, le=168)

我希望有可能也可以设置 -1 值。因此,我需要排除零值,但我仍然想允许-1 值和从 1168 的值。

这可行吗?


我不确定我是否正确理解了你的问题,但是 ge 表示 大于或等于le 表示 小于或等于。如果你想要一个自定义范围,你需要相应地更改这些参数。例如,Field(None, ge=-1, le=168) - Bijay Regmi
1
所以我需要排除零值,这样它看起来就像'''-1''',从1到168。 - SimonZen
1
你可以将范围扩展到-1,然后添加自定义的Pydantic验证器来检查它不是0? - M.O.
是的,我考虑过这个问题,但希望有更优美的解决方案。 - SimonZen
1个回答

7
您可以指定范围为-1168,并使用自定义的Pydantic验证程序来检查该值是否等于0。如果是,则raise ValueError。如果Pydantic模型用于定义端点的查询参数(使用Depends()),请参阅此答案

示例

from fastapi import FastAPI
from typing import Optional
from pydantic import Field, BaseModel, validator

app = FastAPI()

class Foo(BaseModel):
    item: Optional[int] = Field(None, ge=-1, le=168)

    @validator('item')
    def prevent_zero(cls, v):
        if v == 0: 
            raise ValueError('ensure this value is not 0')
        return v
 
@app.post("/")
def submit(foo: Foo):
    return foo

真的没有其他办法吗(曾经有一个正则表达式属性,但似乎在版本大于2之后被删除了)? - Christof Kälin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接