今天,我在这里阅读了有关如何建立在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一起使用。
谢谢你的帮忙
等值ndb
是KeyProperty
:
资料储存库金钥
可选关键字参数:kind = kind,要求分配给此属性的键始终具有指示的种类。可以是字符串或Model子类。
您会发现,只需替换属性名称即可在您的示例中就足够了,除了关键字collection_name
不再起作用:这是因为旧版本ReferenceProperty
在幕后为您做了一些工作,在引用的类中创建了一个查询属性来尝试使您的生活更轻松,但是它被引入了ndb
,选择了一种更明确的方法,即只存储密钥并让您担心实现细节。
如果您想知道,此更改的原因是自动属性是如此易于使用,以至于通常会忽略实际发生的事情(看不见,无所顾忌),并最终导致很多优化这些额外的工作和查询非常耗时。
这对您意味着什么,而不是编写以下行:
for phone in scott.phone_numbers:
您必须phone_numbers
自己编写查询代码:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句