【问题标题】:Graphql Django best way to get nested object propertyGraphql Django 获取嵌套对象属性的最佳方法
【发布时间】: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
    }
}

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

【问题讨论】:

    标签: python django graphql relay graphene-python


    【解决方案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
        }
    }
    

    其他建议?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-07
      • 2021-03-25
      • 1970-01-01
      • 2012-12-29
      • 2021-03-08
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多