Graphene-Django: в схеме объединить объекты запроса (принимает только первый аргумент)

Я пытаюсь объединить несколько схем запросов, расположенных в разных приложениях в Django 2.1. Использование graphene-django 2.2 (пробовал 2.1 с той же проблемой). Питон 3.7.

Класс Query регистрирует только первую переменную. Например, shop.schema.Query.

import graphene
import graphql_jwt
from django.conf import settings

import about.schema
import shop.schema
import landingpage.schema

class Query(about.schema.Query, shop.schema.Query, landingpage.schema.Query, graphene.ObjectType):
  pass

class Mutation(shop.schema.Mutation, graphene.ObjectType):
  token_auth = graphql_jwt.ObtainJSONWebToken.Field()
  verify_token = graphql_jwt.Verify.Field()
  refresh_token = graphql_jwt.Refresh.Field()

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

Почему это так? Что-то изменилось с классами в python 3.7? В учебнике по графену говорится, что это будет наследоваться для нескольких...

class Query(cookbook.ingredients.schema.Query, graphene.ObjectType):
    # This class will inherit from multiple Queries
    # as we begin to add more apps to our project
    pass

schema = graphene.Schema(query=Query)

Я экспортирую свою схему в schema.json для использования с релейным реле. Я нахожу схему запроса "коллекция" объекта на целевой странице (переменная 3.). Реле возвращает:

ОШИБКА: GraphQLParser: неизвестное поле collection для типа Viewer. Источник: документ AppQuery файл: containers/App/index.js.

Это проблема с тем, что Relay читает мой schema.json?


person Espen Finnesand    schedule 06.09.2018    source источник


Ответы (1)


Мне удалось решить ее вскоре после написания этого. Моя проблема заключалась в том, что у меня был объект Viewer в каждом приложении. Потому что я считаю полезным иметь viewer-graphql-root, например:

graphql'
  viewer {
    collection {
      somestuff
    }
  }
'

Я переместил объект Viewer в корневую schema.py следующим образом:

class Viewer(about.schema.Query, landingpage.schema.Query, shop.schema.Query, graphene.ObjectType):
  class Meta:
    interfaces = [relay.Node, ]

class Query(graphene.ObjectType):
  viewer = graphene.Field(Viewer)

  def resolve_viewer(self, info, **kwargs):
    return Viewer()

class Mutation(shop.schema.Mutation, graphene.ObjectType):
  token_auth = graphql_jwt.ObtainJSONWebToken.Field()
  verify_token = graphql_jwt.Verify.Field()
  refresh_token = graphql_jwt.Refresh.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)
person Espen Finnesand    schedule 06.09.2018