我现在正在为我的学习构建flask项目,现在我有这样的员工简单模式(没有添加所有列名):
class GenderChoices(enum.Enum):
M = 'M'
F = 'F'
def __str__(self):
return self.name
@staticmethod
def from_string(s):
try:
return GenderChoices[s]
except KeyError:
raise ValueError()
class Employees(db.Model):
___tablename___ = "employees"
emp_no = db.Column(db.Integer, primary_key=True)
gender = db.Column(db.Enum(GenderChoices, values_callable=lambda x: [str(member.value)
for member in GenderChoices]))
关于资源方面的基本参数,我是这样传递的:
parser.add_argument('gender',
type=GenderChoices.from_string,
help='This field cannot be blank',
required=True,
choices=list(GenderChoices))
我的回答是这样的:
return {
'message': 'New Employee Has been created',
'Employee_Details': {
'employee_id': new_id,
'gender': data['gender']
}
}, 201
虽然运行我的脚本添加员工运行良好,它存储在我的数据库中的数据,以及,但在显示我的结果 Postman ,我得到以下错误:
TypeError: Object of type GenderChoices is not JSON serializable
似乎有什么问题。
1条答案
按热度按时间ghhkc1vu1#
Flask-RESTful
如果你使用的是Flask-RESTful,你可以通过使用
@marshal_with
装饰器并指定一个field.String
来强制转换为字符串。flask
当使用纯 flask 时,您可以使用以下变体。
一方面,您可以使用
StrEnum
,其值可以在没有任何操作的情况下转换为JSON。如果您想使用替代方法,可以创建一个自定义
JSONProvider
并在应用程序中使用它。下面的示例扩展DefaultJSONProvider
。