接口中包含的 Graphql 类型未添加到 graphene-django 中的模式
Graphql type included in interface not added to schema in graphene-django
我有一个由两个具体类型实现的接口类型
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
.
你能找出上面的错误吗?
尝试将 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。线长。
我有一个由两个具体类型实现的接口类型
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
.
你能找出上面的错误吗?
尝试将 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。线长。