FastAPI:如何使用 BaseModel 模式的枚举

问题描述 投票:0回答:4

我想在我的 FastAPI 模型中使用枚举字段。这是我的模型:

import enum

from sqlalchemy import Column, Enum, Integer, String

class Gender(enum.Enum):
    FEMALE = "FEMALE"
    MALE = "MALE"
    ...


class User(Base):
    __tablename__ = 'user'
   
    id = Column(Integer, primary_key=True)
    name = Column(String)
    gender Column(Enum(Gender), default=Gender.FEMALE)

这是我的架构:

from enum import Enum

from pydantic import BaseModel

class Gender(str, Enum):
   FEMALE = 'FEMALE'
   MALE = 'MALE'
   ...


class User(BaseModel):
    id: int
    name: str
    gender: Gender

    class Config:
        orm_mode = True

我收到错误消息

value is not a valid enumeration member; permitted: 'FEMALE', 'MALE' (type=type_error.enum; enum_values=[<Gender.FEMALE: 'FEMALE'>, <Gender.MALE: 'MALE'>])

更新:

现在我收到错误消息:

pydantic.error_wrappers.ValidationError: 1 validation error for IdentificationRequestBase response -> 0 -> gender field required (type=value_error.missing)

python enums database-schema fastapi mode
4个回答
2
投票

对于 MongoDB,请遵循以下步骤:

1.创建schema.py文件

from enum import Enum

class Gender(str,Enum):
    Male = 'Male'
    Female = "Female"

2.接下来在主 BaseModel 中使用 Gender

class User(BaseModel):
    name: str
    gender: Gender

        

3.现在在你的main.py文件中使用User类


2
投票

尝试创建一个名为 enums.py 的文件,在其中仅声明性别:

from enum import Enum, unique


@unique
class Gender(Enum):
    FEMALE = "FEMALE"
    MALE = "MALE"

然后在你的模型中像这样使用它:

from enums import Gender

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    gender = Column(Enum(Gender), default=Gender.FEMALE)

在你的模式中尝试这个:

class User(BaseModel):
    id: int
    name: str
    gender: Gender

class Config:
    orm_mode = True

0
投票

您是否尝试过将默认值简单地设置为字符串:

    gender = Column(Enum(Gender), default="FEMALE")

如果仍然没有帮助,请尝试将

default
更改为
server_default
:

    gender = Column(Enum(Gender), server_default="FEMALE")

如果您希望架构默认为

None
,您还可以将该字段设为可选:

from typing import Optional

class User(BaseModel):

        gender: Optional[Gender]

0
投票

我遇到了同样的问题,这就是我解决它的方法。

Gender
文件中导入
your_model.py
your_schemas.py
文件中

这就是

your_schemas.py
文件的样子

from 'your_model' import Gender
from pydantic import BaseModel


class User(BaseModel):
    id: int
    name: str
    gender: Gender #from 'your_model.py'

    class Config:
        orm_mode = True
© www.soinside.com 2019 - 2024. All rights reserved.