【问题标题】:Error converting uuid4 value to string in Pydantic model在 Pydantic 模型中将 uuid4 值转换为字符串时出错
【发布时间】:2022-12-30 16:30:51
【问题描述】:

我是 Python 和 Fastapi 的新手。问题是每次我尝试发出发布请求时,Fastapi 响应主体架构都会向我显示此错误。首先,我打算使用十六进制函数将 uuid4 转换为字符串,然后在响应正文中显示转换后的输出。 我想要的是名为 api_key 的字段自动为每个输入记录生成动态默认 uuid(与 id 不同,而是一个存储唯一值的字段)

**
422 Unprocessable Entity

{
  "detail": [
    {
      "loc": [
        "body"
      ],
      "msg": "'str' object is not callable",
      "type": "type_error"
    }
  ]
}**

这是我试过的代码:

class Terminal(BaseModel):
    api_key: str = Field(title="api key", default_factory=uuid.uuid4().hex)
    name: str = Field(..., title="Terminal name", regex="[^\s]+")
    mac: MACAddressStr = Field(..., title="MAC address")
    mgmt_ip: IPv4Address = Field(..., title="Management IP")

所有需要用户输入的字段都可以正常工作。 当我尝试手动输入 api_key 作为字符串时,它也有效。 我想要的输出:

{
  "api_key": "5876753e02f141b5a83f7e9cff6db1ba"  // auto-generated
  "name": "terminal1",
  "mac": "aa:bb:cc:dd:ee:ff",
  "mgmt_ip": "1.1.1.1"
}

【问题讨论】:

    标签: python string fastapi uuid pydantic


    【解决方案1】:

    来自docs

    default_factory:如果提供,它必须是一个零参数可调用函数,当此字段需要默认值时将被调用。除其他用途外,这可用于指定具有可变默认值的字段,如下所述。同时指定 default 和 default_factory 是错误的。

    所以,这样做是可行的:

    default_factory=lambda: uuid.uuid4().hex
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 2013-05-23
      • 2014-01-23
      • 2012-07-29
      • 2023-04-04
      相关资源
      最近更新 更多