代码之家  ›  专栏  ›  技术社区  ›  jorgen

接口中包含的Graphql类型未添加到graphene django中的架构

  •  0
  • jorgen  · 技术社区  · 5 年前

    我有一个由两个具体类型实现的接口类型

    interface InterfaceType {
      id: ID!
      name: String!
    }
    
     type Type1 implements InterfaceType {
        aField: String
    }
    
     type Type2 implements InterfaceType {
        anotherField: String
    }
    

    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
            }
        }
    

    使用阿波罗:

    import gql from 'graphql-tag';
    
    const interfaceQuery = gql`
        query {
            interfaceQuery {
                id
                name
                ... on Type1 {
                    aField
                }
                ... on Type2 {
                    anotherField
                }
            }
        }
    `;
    

    我得到了错误 "Unknown type "Type1". Perhaps you meant ..."

    另一个领域

    0 回复  |  直到 5 年前
        1
  •  2
  •   rmoorman    5 年前

    尝试添加 Type1 Type2 到您的模式显式。石墨烯需要你的指导才能知道你想把这些类型添加到你的模式中。

    schema = graphene.Schema(
        query=Query,
        mutation=Mutation,
        types=[
            Type1,
            Type2,
        ]
    )
    

    这也是 mentioned in the documentation

    schema = graphene.Schema(query=Query, types=[Human, Droid])
    

    因此(作为旁白)这可能是一个很好的例子,说明为什么最好不要将一些东西折叠成一行,即使你可以改变行的长度。

    推荐文章