2016-11-04 46 views
2

我使用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) 

當我運行這個resquest,我有一個錯誤。

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

錯誤:

mutate() takes exactly 4 arguments (5 given) 

我把4個參數,發生變異()不是5 ...它是一個錯誤嗎?

回答

3

石墨烯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) 
+0

感謝您的回答。我修好了,但那並不能解決我的錯誤。 –

+0

對不起......我愚蠢地複製了你寫的內容......現在沒有裝飾器,因爲文檔說...感謝您的幫助。 –

+0

@Yacine Filali它必須是:def mutate(cls,instance,args,context,info): – nim4n