我可以在Graphene Django中的自定义类型下嵌套类似的模型关系吗?

我可以在Graphene Django中的自定义类型下嵌套类似的模型关系吗?,django,graphql,graphene-python,graphene-django,Django,Graphql,Graphene Python,Graphene Django,假设我有一个Django模型,其中有许多相互关联的关系,是否可以通过非模型类型嵌套它们以进行查询?一个具体的例子: 假设我有一个模型组织,其关系包括X_项目,X_账户,等等,这些都是Django模型 允许以下查询非常容易: query fetchOrganization($id: Int!) { organization(id: $id) { id, ... other fields ... X_accounts { ... } X_pro

假设我有一个Django模型,其中有许多相互关联的关系,是否可以通过非模型类型嵌套它们以进行查询?一个具体的例子:

假设我有一个模型
组织
,其关系包括
X_项目
X_账户
,等等,这些都是Django模型

允许以下查询非常容易:

query fetchOrganization($id: Int!) {
  organization(id: $id) {
    id,
    ... other fields ...
    X_accounts {
      ...
    }
    X_projects {
      ...
    }
  }
}
query fetchOrganization($id: Int!) {
  organization(id: $id) {
    id,
    ... other fields ...
    X {
      accounts {
        ...
      }
      projects {
        ...
      }
    }
  }
}
但我更愿意支持以下查询:

query fetchOrganization($id: Int!) {
  organization(id: $id) {
    id,
    ... other fields ...
    X_accounts {
      ...
    }
    X_projects {
      ...
    }
  }
}
query fetchOrganization($id: Int!) {
  organization(id: $id) {
    id,
    ... other fields ...
    X {
      accounts {
        ...
      }
      projects {
        ...
      }
    }
  }
}

鉴于
X
在后端作为Django模型/关系实际上没有意义,有没有办法实现这一点?

是的,您可以通过修改“X”的新解析程序来实现这一点,该解析程序使用具有帐户和项目字段的自定义对象类型

例如,您需要创建一个新的复合对象类型,它是帐户和项目的容器(假设您已经为帐户和项目模型定义了一个
djangObjectType
类)

然后修改组织类型定义以添加新字段,如

class OrganizationType(DjangoObjectType):
   x = graphene.Field(XType)

   class Meta:
        model = Organization
        # You might want to exclude the x_project and x_account fields

   def resolve_x(self, info, **kwargs):
       # You'll have to work out how to parse arguments and fetch account and project
       return XType(account=account, project=project)

?谢谢,非常有帮助!