我想在我的 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)
。
对于 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类
尝试创建一个名为 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
您是否尝试过将默认值简单地设置为字符串:
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]
我遇到了同样的问题,这就是我解决它的方法。
从
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