TypeError: Decimal ('0.00') не сериализуем в JSON при ответе объекта мутации графена - PullRequest
0 голосов
/ 02 апреля 2019

Это приложение построено поверх 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 Mutation. Мы используем библиотеку 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
...