Graphene-Django:在模式中结合查询对象(只接受第一个参数)
Posted
技术标签:
【中文标题】Graphene-Django:在模式中结合查询对象(只接受第一个参数)【英文标题】:Graphene-Django: In schema combine Query-objects (only takes first argument) 【发布时间】:2019-02-12 01:45:38 【问题描述】:我正在尝试在 Django 2.1 中组合位于不同应用程序中的多个查询模式。使用 graphene-django 2.2(已经尝试过 2.1 有同样的问题)。 Python 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,以便将其与 React 中继一起使用。我确实从登录页面(3. 变量)中找到了我的对象“集合”查询模式。接力返回:
错误:GraphQLParser:类型
Viewer
上的未知字段collection
。 来源:文档AppQuery
文件:containers/App/index.js
。
Relay 读取我的 schema.json 有问题吗?
【问题讨论】:
【参考方案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)
【讨论】:
【参考方案2】:-
在 setting.py 中添加一个新文件为 schema.py
在 schema.py 中组合您的查询和突变,如下所示:
进口石墨烯
将 about.schema 导入为 about
将 shop.schema 作为项目导入
将landingpage.schema 导入为项目
然后添加:
class Query(about.schema.Query, shop.schema.Query, landingpage.schema.Query, graphene.ObjectType):
pass
class Mutation(about.schema.Mutation, shop.schema.Mutation, landingpage.schema.Mutation, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query, mutation=Mutation)
在 settings.py 中配置您的组合架构,如下所示:
石墨烯 = "SCHEMA": "core.schema.schema",
【讨论】:
以上是关于Graphene-Django:在模式中结合查询对象(只接受第一个参数)的主要内容,如果未能解决你的问题,请参考以下文章
界面中包含的 Graphql 类型未添加到 graphene-django 中的模式
GraphQL graphene-django 基本使用文档
graphene-django 将 models.BigInteger() 转换为 graphene.Integer()