如何配置scalars与resolvers以获取Cloud Datastore的key/ID值
问题解决方法
根因说明
Google Cloud Datastore的实体Name/ID是实体键(Key)的内置组成部分,不属于实体的自定义属性集合,默认的属性读取逻辑不会自动返回该值,需要显式配置提取逻辑。
操作步骤
- 第一步:在Datastore实体模型中添加Name/ID的提取逻辑
如果使用ndb客户端,示例如下:
from google.cloud import ndb class YourBusinessModel(ndb.Model): # 原有自定义字段 field1 = ndb.StringProperty() field2 = ndb.IntegerProperty() # 新增实体ID/Name提取属性 @property def entity_key_id(self): # 自动适配数字ID或字符串Name return self.key.id_or_name
如果使用原生Datastore客户端,直接从返回的实体对象读取entity.key.id_or_name即可。
- 第二步:在graphene的GraphQL类型定义中新增对应字段的暴露配置
import graphene from graphene_ndb import NdbObjectType class YourBusinessModelType(NdbObjectType): class Meta: model = YourBusinessModel # 显式加入新增的entity_key_id字段到返回字段列表 fields = ("entity_key_id", "field1", "field2")
- 第三步:调整GraphQL查询语句,加入
entity_key_id字段即可获取对应的Name/ID值。
可选配置
如果你需要单独区分数字类型的ID和字符串类型的Name,可以拆分两个属性:
@property def numeric_id(self): return self.key.id @property def string_name(self): return self.key.name
然后在graphene类型中分别暴露两个字段即可。
内容的提问来源于stack exchange,提问作者rombai
相关产品推荐
相关产品推荐

