无法在我的响应 JSON 中获取枚举值

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

我现在正在为我的学习构建烧瓶项目,现在我有这样的员工简单模式(没有添加所有列名称):

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

运行我的脚本来添加员工时运行良好,并且它也将数据存储在我的数据库中,但是在邮递员上显示我的结果时,我收到以下错误:

TypeError: Object of type GenderChoices is not JSON serializable

似乎有什么问题。

json python-3.x flask enums flask-sqlalchemy
1个回答
0
投票

一方面,您可以使用

StrEnum
,其值无需任何操作即可更改。

class GenderChoices(enum.StrEnum):
    M = 'M'
    F = 'F'

如果您想使用替代方法,您可以创建自定义

JSONProvider
并在您的应用程序中使用它。以下示例扩展了
DefaultJSONProvider

from flask.json.provider import DefaultJSONProvider

class CustomJSONProvider(DefaultJSONProvider):
    @staticmethod
    def default(o):
        if isinstance(o, enum.Enum):
            return o.name
        return DefaultJSONProvider.default(o)


app = Flask(__name__)
app.json_provider_class = CustomJSONProvider
app.json = CustomJSONProvider(app)
© www.soinside.com 2019 - 2024. All rights reserved.