今天我在这里阅读了这篇关于如何在我的GAE REST API中使用一对多关系的文章。
https://cloud.google.com/appengine/articles/modeling
我认为这非常简单,但后来我意识到我使用的是ndb而不是db,所以我不能使用db.ReferenceProperty。
这里我有一个模型路线
class Route(ndb.Model):
driver_id = ndb.IntegerProperty()
requester_id = ndb.IntegerProperty()
startpoint = ndb.GeoPtProperty(required=True)
endpoint = ndb.GeoPtProperty(required=True)
regular = ndb.BooleanProperty(required=True)
date_and_time = ndb.DateTimeProperty(required=True)
places_available = ndb.IntegerProperty()
val_lift = ndb.IntegerProperty()
在这里,我有我的模型RegularDays,如果收到的JSON中的Regular为True
,将使用它class RegularDays(ndb.Model):
route = db.ReferenceProperty(Route,
collection_name='regular_days')
Monday = ndb.BooleanProperty(required=True)
Tuesday = ndb.BooleanProperty(required=True)
Wednesday = ndb.BooleanProperty(required=True)
Thursday = ndb.BooleanProperty(required=True)
Friday = ndb.BooleanProperty(required=True)
Saturday = ndb.BooleanProperty(required=True)
Sunday = ndb.BooleanProperty(required=True)
所以我要做的就是这个。
if newroute.regular:
RegularDays(route=newroute,
Monday=route_json['Days']['Monday'],
Tuesday=route_json['Days']['Tuesday'],
Wednesday=['Days']['Wednesday'],
Thursday=route_json['Days']['Thursday'],
Friday=route_json['Days']['Friday'],
Saturday=route_json['Days']['Saturday'],
Sunday=route_json['Days']['Sunday']).put()
但现在我对如何更改此代码非常困惑,因此它适用于NDB。
感谢您的帮助
答案 0 :(得分:6)
ndb
中的等价物是KeyProperty
:
数据存储区密钥
可选关键字参数:kind = kind,要求分配给此属性的键始终具有指定的类型。可以是字符串或Model子类。
您会发现在示例中只需更换属性名称即可,但关键字collection_name
将不再有效:因为旧的ReferenceProperty
做了一些在幕后为你工作,在引用的类中创建一个查询属性,试着让你的生活变得更轻松,但它被放到了ndb
中,选择了更明确的方法来存储密钥并让你担心实施细节。
如果您想知道,这种变化的原因是自动属性非常容易使用,通常忽略实际发生的事情(看不见,心不在焉),并结束需要进行大量额外的工作和查询,这些都需要耗费时间进行优化。
这对你意味着,而不是写这一行:
for phone in scott.phone_numbers:
您必须自己编写phone_numbers
查询代码:)