2012-04-11 9 views
0

これはパズルのビットが、私はこれらの疑似モデルを持っています。しかし、私は(あまりにも多くのデータベースクエリを避けて)これを効果的に行う方法がわからないんだけど、提案はシリアライズJSONオブジェクトを効果的

{ 

    CountryX: { 
     RegionX { 
      SubRegionX = [ 
       "EstateX" 
       "EstateY", 
       "EstateZ" 
      ], 
      SubRegionY = [ etc... ] 
     }, 
     RegionY { etc... } 
    }, 
    CountryY: { etc... } 

} 

答えて

3

を高く評価している私はこれをテストしていませんが、それはあなたのアイデアを与える必要があります。最も内側のオブジェクトから始め、select_relatedを使用して階層を走査し、次に内側のオブジェクトをループし、必要に応じて階層のキーを追加します。

土地のない国/地域/地域がある場合は、JSONには含まれませんので、注意してください。そうでない場合は、それぞれのモデルを個別にクエリする必要があります。

data = {} 
for e in Estate.objects.select_related("sub_region__region__country"): 
    sub, region, country = e.sub_region, e.sub_region.region, e.sub_region.region.country 
    if country.name not in data: 
     data[country.name] = {} 
    if region.name not in data[country.name]: 
     data[country.name][region.name] = {} 
    if sub.name not in data[country.name][region.name]: 
     data[country.name][region.name][sub.name] = [] 
    data[country.name][region.name][sub.name].append(e.name) 
json_data = json.dumps(data) 
+0

ありがとう、ありがとう –

+1

データに含まれていないsub.name [country.name] [region.name] sub.nameがデータ[country.name] [region.name]にない場合は[sub.name] –

1

この提案は、あなたが探していた正確に何ではないかもしれませんが、私はアプリのデータの間に合わせと-JSONが必要な状況のカップルでそれを使用しました。

./manage.py dumpdata app_name(またはapp_name.model_name)を参照してください。これは、そのアプリケーション(またはそのモデル)のすべてのテーブルのすべてのデータに対してJSONを提供します。フォーマットはあなたが考えていたものとは多少異なるかもしれませんが、ForeignKey関係を維持するために必要なPKとクラス情報がすべて含まれています。の作成に必要な順序でそれらを吐き出してからオブジェクトを参照しています。とても便利な。

スクリプト内から呼び出す場合は、django/core/management/commands/dumpdata.pyを参照してください。

関連する問題