Google应用引擎 - 针对父母构建模型布局?

时间:2009-07-29 11:52:42

标签: python google-app-engine django-models

如何有效地构建他的db.Models?

例如,假设我有一个国家的模型,具有“name,northern_hemisphere(boolean),population,states(状态列表),capital(boolean)”等属性。

另一种称为州或县的模型或具有“名称,人口,城市(城市列表)”属性的东西。

另一个名为Cities的模型,其属性为“name,capital(boolean),distance_from_capital,population。”

我刚刚和我做了这件事。显然,我需要城市存储与某些国家有关的数据,因此各国需要与特定国家有关的数据。在我的国家模型中,我会有加利福尼亚州,科罗拉多州等,每个都必须有一个特定的城市列表。

如何构建他的模型,以便它们以某种方式相关?我对MVC很新,所以我在概念上挣扎。是否可以使用类(父)构造函数?

1 个答案:

答案 0 :(得分:4)

如果您想将关系数据存储在Google App Engine的数据存储区中,这篇文章可以从Modeling Entity Relationships开始。

您使用ReferenceProperty指定两个模型之间的关系:

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)

Country模型的实例会自动获取一个名为states的新属性,该属性将成为获取所有相关State实体的查询。与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