如何通过Graphene实现先访问BasicQueryData再调用oneNode查询?
实现GraphQL请求通过指定字段进入子查询类调用方法
问题背景
原本直接将BasicQuery作为根查询类时,oneNode查询可正常运行。现在调整为在根Query类中嵌套BasicQuery作为字段,希望发送请求时先通过BasicQueryData字段进入,再调用oneNode方法。
解决方案
需要调整根查询类的字段定义,添加解析方法确保能返回子查询类的实例,同时匹配请求中的字段名:
- 匹配请求字段名:将根Query中的字段名调整为与请求里的
BasicQueryData一致,可通过name参数显式指定,或利用Graphene的蛇形命名转驼峰规则自动转换 - 添加解析方法:为该字段编写resolve方法,返回
BasicQuery类的实例,这样才能访问其下的oneNode子字段
修改后的schema.py代码:
from graphene import Schema, Field, ObjectType from .basic_objects.queries import BasicQuery from .basic_objects.mutations import BasicMutation class Query(ObjectType): # 定义与请求匹配的字段,name参数指定GraphQL暴露的名称 basic_query_data = Field(BasicQuery, name="BasicQueryData") # 解析方法:返回BasicQuery实例,供后续调用其子字段 def resolve_basic_query_data(self, info): return BasicQuery() # 其他查询字段... class Mutation(ObjectType): basic_mutation = Field(BasicMutation, name="BasicMutation") def resolve_basic_mutation(self, info): return BasicMutation() schema = Schema(query=Query, mutation=Mutation)
验证请求
你的测试请求结构是正确的,现在可以正常执行:
query MyQuery { BasicQueryData { oneNode(id: 1) { comment coordinateY } } }
关键说明
- 当把子查询类作为根查询的字段时,必须提供resolve方法返回该子查询类的实例,否则Graphene无法解析其子字段
- 字段名需与请求中的名称严格匹配,若使用蛇形命名(如
basic_query_data),Graphene会自动转为驼峰格式BasicQueryData,可省去name参数
内容的提问来源于stack exchange,提问作者Kamran Teymurov
相关产品推荐
相关产品推荐

