Skip to main content
 首页 » 编程设计

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

2024年12月31日25lexus

而不是像这样进行查询

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 
    } 
} 

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

请您参考如下方法:

我们像这样更改模型//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 
    } 
} 

其他建议 ?