【问题标题】:How to set range and value out of range in Pydantic field using FastAPI?如何使用 FastAPI 在 Pydantic 字段中设置范围和值超出范围?
【发布时间】:2023-02-23 23:54:43
【问题描述】:

所以我有以下代码行:

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

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

有什么办法吗?

【问题讨论】:

  • 我不确定我是否正确理解你的问题,但 ge 表示 greater or equals tole 表示 less than or equals to。因此,如果您想要自定义范围,则需要相应地更改这些参数。例如Field(None, ge=-1, le=168)
  • 所以我需要排除零值所以它看起来像 '''-1''' 并且从 1 到 168
  • 您可以将范围向下扩展到 -1,然后添加一个自定义 Pydantic 验证器来检查它是否为 0?
  • 是的,我考虑过,但希望这个问题有更好的解决方案

标签: python range fastapi pydantic


【解决方案1】:

您可以指定从 -1168 的范围,还可以使用自定义 Pydantic 验证器来检查该值是否等于 0。如果是这样, raise ValueError。如果 Pydantic 模型改为用于定义端点的查询参数(使用Depends()),请查看this answer

例子

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2023-03-27
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多