Graphql Django 获取嵌套对象属性的最佳方法

Posted

技术标签:

【中文标题】Graphql Django 获取嵌套对象属性的最佳方法【英文标题】:Graphql Django best way to get nested object property 【发布时间】:2018-12-08 18:39:09 【问题描述】:

而不是像这样进行查询

query 
    allObjectC 
        id # self ID()
        nestedB_set 
            id
            nestedA_set 
                id # ID() we want to get
            
        
    

新的 Graphql 查询

query 
    allObjectC 
        id # self ID()
        nestedA_id # nested nested ID() we want to get
    

对此有什么最佳实践或想法吗? 提前致谢。

【问题讨论】:

【参考方案1】:

我们像这样改变模型 // Models.py

class ObjectA(models.Model):
    ...

class ObjectB(models.Model):
    propertyB = models.ForeignKey(ObjectA, on_delete=models.CASCADE, related_name='nestedB')

class ObjectC(models.Model):
    propertyC = models.ForeignKey(ObjectB, on_delete=models.CASCADE, related_name='nestedC')

    @property # new property created
    def nestedB_nestedA_id(self):
        return self.propertyC.nested_objectB.nested_objectA.id

我们像这样改变graphql模式 // schema.py

class ObjectCNode(DjangoObjectType):

    nestedB_nestedA_id = graphene.Int(source='nestedB_nestedA_id') # as proxy 

    nestedA_id = graphene.ID() # globalID of ObjectANode we want to get

    def resolve_nestedB_nestedA_id(self, info, **kwargs):
        return self.nestedB_nestedA_id

    def resolve_nestedA_id(self, info, **kwargs):
        return relay.Node.to_global_id(ObjectANode._meta.name, self.nestedB_nestedA_id)

现在查询

query 
    allObjectC 
        id # self ID()
        nestedA_id # nested nested ID() we want to get
    

其他建议?

【讨论】:

以上是关于Graphql Django 获取嵌套对象属性的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 嵌套对象添加 GraphQL 突变?

GraphQL 无法解析嵌套对象属性

如何通过 ID 从 Apollo 缓存中读取嵌套对象?

使用嵌套对象获取 React 中 Graphql 的问题 - 对象未定义

突变中的 GraphQL 嵌套节点 - 对象文字只能指定已知属性,并且类型中不存在“天”

Django GraphQL JWT:tokenAuth 突变返回“str 对象没有属性解码”