如何有效地构建他的db.Models?
例如,假设我有一个国家的模型,具有“name,northern_hemisphere(boolean),population,states(状态列表),capital(boolean)”等属性。
另一种称为州或县的模型或具有“名称,人口,城市(城市列表)”属性的东西。
另一个名为Cities的模型,其属性为“name,capital(boolean),distance_from_capital,population。”
我刚刚和我做了这件事。显然,我需要城市存储与某些国家有关的数据,因此各国需要与特定国家有关的数据。在我的国家模型中,我会有加利福尼亚州,科罗拉多州等,每个都必须有一个特定的城市列表。
如何构建他的模型,以便它们以某种方式相关?我对MVC很新,所以我在概念上挣扎。是否可以使用类(父)构造函数?
答案 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