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



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

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)

这是我的schema:

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).

尝试创建一个名为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

MongoDB:

1。创建schema.py文件

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

2。下一次使用性别

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

3。现在使用用户类在main.py文件

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

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]

我有同样的问题,这就是我如何能够解决它。

importGenderfromyour_model.pyfile inyour_schemas.pyfile

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

最新更新