GraphQLError 未知类型“XYZMutationInput”

Posted

技术标签:

【中文标题】GraphQLError 未知类型“XYZMutationInput”【英文标题】:GraphQLError Unknown type "XYZMutationInput" 【发布时间】:2020-01-25 02:02:52 【问题描述】:

如何为 DRF 序列化器创建 graphql 输入类型?

我正在使用 django rest 框架 (DRF) 序列化程序 graphene-django,并且我能够看到在 graphiql 中定义的 CreateThingMutationInput 类型:

  mutation TestCreate($input: CreateThingMutationInput!) 
    createProjectThing(input: $input) 
      id
      errors 
        field
        messages
      
    
  

但是,我无法运行:

        schema = graphene.Schema(query=Query)
        result = schema.execute(self.query, variables=variables)

我明白了:

[GraphQLError('Unknown type "CreateThingMutationInput".',)] 

以下内容:

class CreateThingMutation(SerializerMutation):
    class Meta:
        serializer_class = ThingListViewSerializer


class Mutation(graphene.ObjectType):
    debug = graphene.Field(DjangoDebug, name="_debug")

    create_project_thing = CreateThingMutation.Field()

我也试过了:

class CreateThingMutationInput(graphene.ObjectType):
    input = graphene.Field(convert_serializer_to_input_type(ThingListViewSerializer))

除了尝试定义一个:

class Input:
    input = graphene.Field(convert_serializer_to_input_type(ThingListViewSerializer))

我还可以在types.d.ts中看到从graphql-codegen定义的类型:

export type CreateThingMutationInput = 
  id?: Maybe<Scalars['Int']>,
  ...

相关:

https://github.com/graphql-python/graphene/issues/531 https://github.com/graphql-python/graphene-django/blob/master/docs/mutations.rst#django-rest-framework https://github.com/graphql-python/graphene-django/issues/121

【问题讨论】:

【参考方案1】:

我忘记将mutation kwarg 添加到:

schema = graphene.Schema(query=Query)

应该是:

schema = graphene.Schema(query=Query, mutation=Mutation)

GraphQLError('Unknown type "Number".',) 发生这种情况的另一个原因是,如果查询函数收到意外参数,例如使用 Number 而不是 ID 调用 getThing

query TestQueryWontWork(id: Number="") 
   getThing(id: $id)


query TestQueryWorks(id: ID!) 
   getThing(id: $id)

【讨论】:

以上是关于GraphQLError 未知类型“XYZMutationInput”的主要内容,如果未能解决你的问题,请参考以下文章

[GraphQL 错误]:消息:“rootMutation”类型的字段“createUser”上的未知参数“email”。位置:[object Object],路径:未定义

GraphQLError:类型查询必须定义一个或多个字段。使用类型鹅

合并模式后的“GraphQLError:类型中找不到字段:'query_root'”

错误 TS2416:“ApolloError”类型中的属性“originalError”不可分配给基类型“GraphQLError”中的相同属性

GraphQL 错误:字段“removeFromPostsOnComments”上的未知参数“已删除”

GraphQLError:语法错误:预期名称,找到 [