GraphQLError Неизвестный тип "XYZMutationInput" - PullRequest
0 голосов
/ 25 сентября 2019

Как создать тип ввода graphql для сериализатора DRF?

Я использую сериализаторы django rest framework (DRF), graphene-django, и я могу видеть CreateThingMutationInputтип, определенный в graphiql:

  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))

Я также вижу тип, определенный из graphql-codegen в types.d.ts:

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

, связанных:

1 Ответ

0 голосов
/ 25 сентября 2019

Я забыл добавить mutation kwarg к:

schema = graphene.Schema(query=Query)

Должно быть:

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

Другая причина, по которой это может произойти для GraphQLError('Unknown type "Number".',), заключается в том, что функция запроса получаетнеожиданный аргумент, например, вызов getThing с Number вместо ID:

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

query TestQueryWorks(id: ID!) {
   getThing(id: $id)
}
...