2017-12-26 16 views
0

私は怒鳴るように4つのモデルがあります:Djangoでカスタムネストされたデータを取得するにはどうすればよいですか?

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キー値は、自分で追加します。私はジャンゴ・休憩・フレームワークを使用して知っている は次のようにデータを取得することができます。

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

しかし、どのように私は私の要件データを得ることができますか?

また、AModelインスタンスを最初に照会しようとしましたが、AModelインスタンスのbsをforloopしてから次の操作を行いましたが、それは単純で便利な方法ではなく複雑すぎます。

答えて

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から行くことができます - それらのそれぞれのセットを作成し、それらを反復処理により> A。より

Django reverse lookup of foreign keys

のために、ここで確認してくださいそれは、外部キーの逆引き参照

+0

しかし、どのようにそれについてEModelがあると呼ばれていますか?私はx_setが投稿を助けるとは思わない。 – 1243916142

+0

あなたはDからAへ、DのCのすべての項目、CのB、そしてAからBの項目に戻る必要があります。 – babygame0ver

+0

申し訳ありません最初のクエリを実行するときに間違ったクエリを発しました。すべての可能性のセットが返されます。別のモデルで1つずつ繰り返します – babygame0ver

関連する問題