TypeError:在石墨烯突变对象响应上,Decimal('0.00')不可JSON序列化

时间:2019-04-02 10:27:41

标签: python graphql graphene-python

此应用程序建立在Flask之上,我目前正在该位置上使用用户重置密码功能。这被定义为客户发布请求的一种变体。

客户将提供其密码进行验证,然后向他发送电子邮件,并且该变异将返回UserField标量类型。

此外,我正在使用marshmallow库对数据进行序列化。

models.py

class User(db.model):
    __tablename__ = 'users'

    name = db.Column(db.Boolean)
    email = db.Column(db.Unicode, unique=True, nullable=False)
    credit_account = db.Column(db.Numeric(precision=12, scale=2), default=0)

serializers.py

class UserSerializer(Schema):
    name = fields.String()
    email = fields.String()
    credit_account = fields.Decimal() # Decimal types here!!!
  

注意:UserSerializer上有一个十进制字段,这是graphql的根本问题


下面的代码是GraphQL突变的实现。我们将graphene库用于python。

fields.py


class UserField(Scalar):

    @staticmethod
    def serialize(user):
        json = UserSerializer()
        return json.dump(user).data

    @staticmethod
    def parse_literal(node):
        pass

    @staticmethod
    def parse_value(value):
        pass

mutations.py

class ResetUserPassword(graphene.Mutation):
    user = graphene.Field(UserField)

    def mutate(self, info, password):
        user = get_user(password=password)
        send_email(user=user,email=user.email, template='reset_password_template') 
        return ResetUserPassword(user=user)

用法:

{
    "query": "mutation { resetPassword(password: \"foobar\") { user }}"
}

现在,我在控制台上收到此TypeError提示:

raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('0.00') is not JSON serializable

0 个答案:

没有答案