我想在我的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]
我有同样的问题,这就是我如何能够解决它。
importGender
fromyour_model.py
file inyour_schemas.py
file
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