GraphQLError Неизвестный тип "XYZMutationInput"

Как создать тип ввода 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 ответ

Я забыл добавить 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)
}
Другие вопросы по тегам