【问题标题】:Bug with graphene.Mutation?石墨烯的错误。突变?
【发布时间】:2017-03-18 13:22:48
【问题描述】:

我使用 graphene-django 来获得 GrapQL API。 我在 schema.py 中创建了一个突变:

class UpdateApplication(graphene.Mutation):
    class Input:
        id = graphene.String()
        name = graphene.String()

    application = graphene.Field(ApplicationNode)

    @classmethod
    def mutate(cls, instance, args, info):
        name = args.get('name')
        rid = from_global_id(args.get('id'))[1]
        update_application = Application.objects.filter(id=rid).update(name=name)

        return UpdateApplication(application=update_application)



class Mutation(ObjectType):
    update_application = UpdateApplication.Field()

schema = graphene.Schema(mutation=Mutation)

当我运行这个请求时,我有一个错误。

mutation update {
  updateApplication(id: "QXBwbGljYXRpb25Ob2RlOjE=", name: "foo") {
    application {
      name
    }
  }
}

错误:

mutate() takes exactly 4 arguments (5 given)

我在 mutate() 中放了 4 个参数,而不是 5...这是一个错误吗?

【问题讨论】:

    标签: python django graphql graphene-python


    【解决方案1】:

    从石墨烯 1.0 开始,上下文现在默认传递给突变和解析函数,而在以前的版本中它需要 @with_context: https://github.com/graphql-python/graphene/blob/master/UPGRADE-v1.0.md

    所以你的变异函数应该是这样的:

    def mutate(self, args, context, info):
        name = args.get('name')
        rid = from_global_id(args.get('id'))[1]
        update_application = Application.objects.filter(id=rid).update(name=name)
    
        return UpdateApplication(application=update_application)
    

    【讨论】:

    • 感谢您的回答。我修复了它,但这并不能解决我的错误。
    • 对不起...我愚蠢地复制了您所写的内容...文档中说现在没有装饰器...谢谢您的帮助。
    • @Yacine Filali 它必须是:def mutate(cls, instance, args, context, info):
    猜你喜欢
    • 2020-09-01
    • 2022-10-25
    • 2022-01-17
    • 2020-01-08
    • 2018-12-06
    • 2023-02-17
    • 2020-04-09
    • 2020-09-07
    • 2017-08-25
    相关资源
    最近更新 更多