2009-07-29 6 views
1

db.Modelsを効果的に構造化するにはどうすればよいですか?Google App Engine - 親に対するモデルレイアウトの構造化?

例えば、資本(ブール値)、私は「名前、northern_hemisphere(ブール値)、人口、状態(状態のリスト)などのプロパティで、国のためのモデルを持っていると言うことができますが。

と国家と呼ばれる別のモデルまたは郡またはプロパティ "名前、人口、都市(都市のリスト)を持つもの。

とプロパティ「名、資本金(ブール値)、distance_from_capital、人口を持つ都市と呼ばれる別のモデル、。

私はちょうど私と一緒にその裸のことを占めていた。もちろん、私は特定の国に関連するデータを格納する都市を必要とします私の州モデルではカリフォルニア、コロラド州などがあり、それぞれには都市の特定のリストが必要です。

自分のモデルをどのように構造化するのでしょうか?何とか関連?私はそうは概念的に苦労していますMVCに非常に新しいです。クラス(親)コンストラクタを使用することは可能ですか?

答えて

4

Google App Engineのデータストアにリレーショナルデータを保存する場合は、これは最初にModeling Entity Relationshipsという素晴らしい記事です。

次の2つのモデル間の関係を指定するReferencePropertyを使用します。あなたのCountryモデルの

class Country(db.Model): 
    name = db.StringProperty(required=True) 

class State(db.Model): 
    country = db.ReferenceProperty(Country, collection_name='states') 
    name = db.StringProperty(required=True) 

class City(db.Model): 
    state = db.ReferenceProperty(State, collection_name='cities') 
    name = db.StringProperty(required=True) 

インスタンスは、自動的にすべての関連Stateエンティティを取得するためのクエリになりますstatesと呼ばれる新しいプロパティを取得します。都市のモデルStateと同じことです。自動的に作成されるcitiesプロパティは、すべての関連するCityエンティティを取得するクエリになります。

は使用方法:

# Create a new country: 
us = Country(name='USA') 
us.put() 

# Create a new state 
ca = State(name='California', country=us) 
ca.put() 

# Create a new city 
la = City(name='Los Angeles', state=ca) 
la.put() 

# And another 
sf = City(name='San Francisco', state=ca) 
sf.put() 

# Print states 
for state in us.states: 
    print state.name 

    # Print cities 
    for city in state.cities: 
     print ' ' + city.name 

万一出力:迅速な返信用

California 
Los Angeles 
San Francisco 
+0

感謝。少しでも詳しいことを教えてください。私は関係的に - 私はそれらがプロパティatmを継承することを望んでいないことを意味します。 –

+0

ああ、申し訳ありませんが、私は私の答えを変更しました。 – Blixt

+0

クール、それは私が必要なものに見えます - 私はそれを調べます。私はこの質問を今のところ未回答のままにしておきます。 –

関連する問題