如何在Graphene中正确解析带前导下划线的字段?
解决Graphene中解析带前导下划线字段的问题
这个问题我之前踩过坑!Graphene默认会按照下划线转驼峰的规则处理字段名,所以你定义的_id字段会被自动转换为GraphQL schema中的id(而不是你预期的_id),这就是为什么你的resolve__id方法没生效的原因——因为Graphene根本没把这个字段识别成_id。
解决方案:显式指定字段的name参数
要保留前导下划线的字段名,你需要在定义字段时手动指定name参数,强制让GraphQL schema中的字段名就是_id。然后对应的解析方法命名保持resolve__id即可。
修改后的代码如下:
class Article(graphene.ObjectType): # 显式指定GraphQL字段名为"_id",避免自动转换 _id = graphene.Int(name="_id") article_id = graphene.Int() def resolve__id(self, info): return self.article_id
原理说明
- 通过
name="_id",告诉Graphene不要对这个字段名做自动转换,在GraphQL schema中直接使用_id作为字段名。 - 解析方法命名
resolve__id是符合Graphene规则的:解析方法的格式为resolve_<字段名>,因为你的字段名是_id,所以拼接后就是resolve__id(两个下划线)。
这样当你在GraphQL查询中请求_id字段时,就会正确调用resolve__id方法,返回article_id的值了。
内容的提问来源于stack exchange,提问作者Harrison
相关产品推荐
相关产品推荐

