如何在Django中获取自定义嵌套数据?

问题描述 投票:0回答:1

我有四个模型如下:

class AModel(models.Model):
    name = models.CharField(max_length=11)

class BModel(models.Model):
    name = models.CharField(max_length=11)
    a = models.ForeignKey(AModel, related_name="bs")

class CModel(models.Model):
    name = models.CharField(max_length=11)
    b = models.ForeignKey(BModel, related_name="cs")

class DModel(model.Model):
    name = models.CharField(max_length=11)
    c = models.ForeignKey(CModel, related_name="ds")

现在我想得到以下数据:

[
    {"name":"a1",
     "value":1,
     "image":"xxxxx.png",
     "children":[
        {"name":"b1",
         "value":1,
         "image":"xxxxx.png",
         "children":[
             {"name":"c1",
              "value":1,
              "image":"xxxx.png",
              "children":[
                   {"name":"d1",
                    "value":1,
                     "image":"xxxx.png",
                   }
               ]
             }
         ]
        }
     ]
    }
]

请注意,valueimage键值是我自己添加的。我知道使用Django-Rest-Framework可以得到如下数据:

[
    {  
      "id":1,
      "name":"a1",
      "bs":[
          {
           "id":1,
           "name":"b1",
           "cs":[
               "id":1,
               "name":"c1",
               "ds":[
                    {
                        "id":1,
                        "name":"d1",
                    }
                ]
            ]
         }
      ]
    }
]

但是我怎样才能获得我的需求数据?

我也尝试先查询AModel实例,然后再查询AModel实例的bs,然后再做下一步,但我发现这太复杂了,不是一个简单方便的方法。

python django algorithm
1个回答
0
投票

它不是真正的代码,而是伪代码,它会给你一个想法。

data_of_C_in_D = D.C_set # gives all value of C in D
Data_of_B_in_C = for i in data_of_C_in_D:
                     B.i_set #gives all value of C in B

....

类似地,您可以通过制作每个D的集合来自D - > A,然后迭代它们。点击这里查看更多

Django reverse lookup of foreign keys

它被称为外键反向查找

© www.soinside.com 2019 - 2024. All rights reserved.