Python 使用Google App Engine从db.ReferenceProperty切换到ndb?

Python 使用Google App Engine从db.ReferenceProperty切换到ndb?,python,google-app-engine,Python,Google App Engine,今天,我在这里阅读了这篇文章,介绍了如何在我的GAE REST API中使用一对多关系 我认为这很简单,但后来我意识到我使用的是ndb而不是db,所以我不能使用db.ReferenceProperty 这里我有一个模型路线 class Route(ndb.Model): driver_id = ndb.IntegerProperty() requester_id = ndb.IntegerProperty() startpoint = ndb.GeoPtProperty(requ

今天,我在这里阅读了这篇文章,介绍了如何在我的GAE REST API中使用一对多关系

我认为这很简单,但后来我意识到我使用的是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中的RegularDays为真,那么将使用它

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中的等价物是:

数据存储密钥

可选关键字参数:kind=kind,要求分配给此属性的键始终具有指定的种类。可以是字符串或模型子类

您会发现,在您的示例中,简单地替换属性名称就足够了,除了关键字
集合\u name
不再起作用外:这是因为旧的
ReferenceProperty
在幕后为您做了一些工作,在引用的类中创建了一个查询属性,以使您的生活更轻松,但是它在ndb中被删除了,选择了一种更明确的方法,只存储密钥,让您担心实现细节

如果您想知道的话,这种更改的原因是自动属性非常容易使用,以至于通常会忽略实际发生的事情(看不见,想不起来),并最终导致大量额外的工作和查询,而优化这些工作和查询非常耗时

这对你来说意味着,不要写这行:

for phone in scott.phone_numbers:
您必须对电话号码进行编码(请自己查询:)