相关疑难解决方法(0)

如何在 FastAPI 主体验证中使用可区分的联合类型?(模型上的联盟)

我从 Typescript 中知道了一个概念,称为“受歧视的联合”。这是你放置 2 个结构体(类等)的地方,并且类型是根据结构体的值决定的。我正在尝试通过Pydantic验证在FastAPI中实现类似的目标。我可以收到两种不同的请求负载。是其中之一还是另一个取决于变量。如果是,则应由 验证,如果是,则应由 验证。我该如何实现这一目标?找不到任何其他解决方案。accountTypecreativeRegistrationPayloadCreativebrandRegistrationPayloadBrand

问题是它要么返回

unexpected value; permitted: 'creative' (type=value_error.const; given=brand; permitted=('creative',))

或者它根本不起作用。

class RegistrationPayloadBase(BaseModel):
    first_name: str
    last_name: str
    email: str
    password: str


class RegistrationPayloadCreative(RegistrationPayloadBase):
    accountType: Literal['creative']


class RegistrationPayloadBrand(RegistrationPayloadBase):
    company: str
    phone: str
    vat: str
    accountType: Literal['brand']

class A(BaseModel):
    b: Union[RegistrationPayloadBrand, RegistrationPayloadCreative]

def main():
    A(b={'first_name': 'sdf', 'last_name': 'sdf', 'email': 'sdf', 'password': 'sdfds', 'accountType': 'brand'})

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python validation python-typing pydantic fastapi

13
推荐指数
2
解决办法
1万
查看次数

FastAPI 模型的条件调用

我有一个连接到 MongoDB 的多语言 FastAPI。我在 MongoDB 中的文档以两种可用语言复制,并以这种方式构建(简化示例):

\n
\n{\n  "_id": xxxxxxx,\n  "en": { \n          "title": "Drinking Water Composition",\n          "description": "Drinking water composition expressed in... with pesticides.",\n          "category": "Water", \n          "tags": ["water","pesticides"] \n         },\n  "fr": { \n          "title": "Composition de l\'eau de boisson",\n          "description": "Composition de l\'eau de boisson exprim\xc3\xa9e en... pr\xc3\xa9sence de pesticides....",\n          "category": "Eau", \n          "tags": ["eau","pesticides"] \n         },  \n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

因此,我实现了两个模型DatasetFR和,每个模型都对每种语言中的特定外部模型 ( )DatasetEN进行引用。Enumcategorytags

\n
class DatasetFR(BaseModel):\n    title:str\n    description: str\n    category: CategoryFR\n    tags: …
Run Code Online (Sandbox Code Playgroud)

python mongodb pydantic fastapi

8
推荐指数
1
解决办法
6635
查看次数

如何为多个不同对象生成 Pydantic 模型

我需要一个covars包含未知数量条目的变量,其中每个条目都是三个不同的自定义模型之一Pydantic。在本例中,每个条目都描述了我的应用程序的一个变量。

具体来说,我想要covars以下形式。这里显示了三个条目,即variable1variable2variable3,代表三种不同类型的条目。但是,在部署时,应用程序必须允许接收三个以上的条目,并且并非所有条目类型都需要出现在请求中。

covars = {
            'variable1':  # type: integer
                {
                    'guess': 1,
                    'min': 0,
                    'max': 2,
                },
            'variable2':  # type: continuous
                {
                    'guess': 12.2,
                    'min': -3.4,
                    'max': 30.8,
                },
            'variable3':  # type: categorical
                {
                    'guess': 'red',
                    'options': {'red', 'blue', 'green'},
                }
        }
Run Code Online (Sandbox Code Playgroud)

我已成功创建三种不同的条目类型作为三个单独的Pydantic模型

import pydantic
from typing import Set, Dict, Union


class IntVariable(pydantic.BaseModel):
    guess: int
    min: int
    max: int


class ContVariable(pydantic.BaseModel):
    guess: float
    min: float
    max: …
Run Code Online (Sandbox Code Playgroud)

python validation nested pydantic fastapi

6
推荐指数
1
解决办法
1万
查看次数

根据初始化参数初始化两个 Pydantic 模型之一

我有一个MessageModel版本号为 的Pydantic 模型类Literal。现在我们的需求发生了变化,我们需要另一个MessageModel具有更高版本号的版本,因为 的属性MessageModel已经发生了变化。我想要一个类,我可以在其中将版本号作为构造函数的参数。有人有想法吗?

以下是型号:

from typing import Literal
from pydantic import BaseModel


class MessageModelV1(BaseModel):
    version: Literal[1]
    bar: str
        
class MessageModelV2(BaseModel):
    version: Literal[2]
    foo: str
Run Code Online (Sandbox Code Playgroud)

我想要的是一个初始化正确MessageModel版本的类:

model = MessageModel(version=2, ...)
Run Code Online (Sandbox Code Playgroud)

python pydantic

4
推荐指数
1
解决办法
1980
查看次数

标签 统计

pydantic ×4

python ×4

fastapi ×3

validation ×2

mongodb ×1

nested ×1

python-typing ×1