界面中包含的 Graphql 类型未添加到 graphene-django 中的模式
Posted
技术标签:
【中文标题】界面中包含的 Graphql 类型未添加到 graphene-django 中的模式【英文标题】:Graphql type included in interface not added to schema in graphene-django 【发布时间】:2020-01-16 11:41:31 【问题描述】:我有一个由两种具体类型实现的接口类型
interface InterfaceType
id: ID!
name: String!
type Type1 implements InterfaceType
aField: String
type Type2 implements InterfaceType
anotherField: String
使用石墨烯-django:
class InterfaceType(graphene.Interface):
id = graphene.ID(required=True)
name = graphene.String(required=True)
class Type1(graphene_django.types.DjangoObjectType):
a_field = graphene.String(required=False)
class Meta:
model = Model1
interfaces = (InterfaceType,)
class Type2(graphene_django.types.DjangoObjectType):
another_field = graphene.String(required=False)
class Meta:
model = Model2
interfaces = (InterfaceType,)
只要某些查询或突变直接使用Type1
和Type2
,它就可以工作。但就我而言,它们只是通过InterfaceType
间接使用。
问题是当我尝试通过内联片段请求aField
或anotherField
时:
query
interfaceQuery
id
name
...on Type1
aField
...on Type2
anotherField
使用 react-apollo:
import gql from 'graphql-tag';
const interfaceQuery = gql`
query
interfaceQuery
id
name
... on Type1
aField
... on Type2
anotherField
`;
我收到错误"Unknown type "Type1". Perhaps you meant ..."
就像这些类型没有被添加到架构中,因为它们没有直接使用 - 但我仍然需要它们来查询 aField
和 anotherField
。
你能发现上面的错误吗?
【问题讨论】:
【参考方案1】:尝试将Type1
和Type2
显式添加到您的架构中。 Graphene 需要您的一点点指导才能知道您想将这些类型添加到您的架构中。
schema = graphene.Schema(
query=Query,
mutation=Mutation,
types=[
Type1,
Type2,
]
)
这也是mentioned in the documentation(虽然我猜有点容易忽略)。当您查看示例代码时,会出现这样的一行:
schema = graphene.Schema(query=Query, types=[Human, Droid])
因此(顺便说一句)这可能是一个很好的例子,说明为什么最好不要将一些东西折叠成一行,即使你可以 w.r.t.行长。
【讨论】:
很好!!!!经过数小时的谷歌搜索,我终于找到了包含石墨烯类型的正确方法!以上是关于界面中包含的 Graphql 类型未添加到 graphene-django 中的模式的主要内容,如果未能解决你的问题,请参考以下文章
请求在 Graphql 解析器中未定义,但在中间件中包含一些值。 (节点,快递)
将“标签状态栏滚动到顶部”添加到 UIScrollView 中包含的 UITableView