【问题标题】:GraphQL multiple queries in one request in DjangoGraphQL 在 Django 中的一个请求中进行多个查询
【发布时间】:2025-11-22 20:10:02
【问题描述】:

我使用 Django 和石墨烯来构建 API,但我想在一个查询中组合两个模型,模型的所有字段都是相同的。

示例 架构.py

import graphene
from graphene_django import DjangoObjectType
from .models import Post, Post2

class PostType(DjangoObjectType):
    class Meta:
        model = Post

class Post2Type(DjangoObjectType):
    class Meta:
        model = Post2

class Query(graphene.ObjectType):
    post = graphene.List(PostType)
    post2 = graphene.List(Post2Type)

    def resolve_post(self, info):
        return Post.objects.all()

    def resolve_post2(self, info):
        return Post2.objects.all()

我收到此回复:

{
  "data": {
    "post": [
      {
        "title": "post 1"
      }
    ],
    "post2": [
      {
        "title": "post test"
      }
    ]
  }
}

我想得到的是:

{
  "data": {
    "allPost": [
      {
        "title": "post 1"
      },
      {
        "title": "post test"
      }
  }
}

【问题讨论】:

    标签: python django graphql graphene-django


    【解决方案1】:

    您可以创建一个联合类型 (https://docs.graphene-python.org/en/latest/types/unions/#unions) 的列表,它应该可以满足您的需求:

    class PostUnion(graphene.Union):
        class Meta:
            types = (PostType, Post2Type)
    
        @classmethod
        def resolve_type(cls, instance, info):
            # This function tells Graphene what Graphene type the instance is
            if isinstance(instance, Post):
                return PostType
            if isinstance(instance, Post2):
                return Post2Type
            return PostUnion.resolve_type(instance, info)
    
    
    class Query(graphene.ObjectType):
        all_posts = graphene.List(PostUnion)
    
        def resolve_all_posts(self, info):
            return list(Post.objects.all()) + list(Post2.objects.all())
    

    【讨论】:

      最近更新 更多