正确的方法来迁移NDB模型属性

TJ1*_*J1S 3 python google-app-engine app-engine-ndb google-cloud-datastore

我目前在NDB中有一个模型,我想更改属性名称而不必触及NBD.假设我有以下内容:

from google.appengine.ext import ndb

class User(ndb.Model):
  company = ndb.KeyProperty(repeated=True)
Run Code Online (Sandbox Code Playgroud)

我想要的是更像这样的东西:

class User(ndb.Model):
  company_   = ndb.KeyProperty(repeated=True)

@property
def company(self):
   return '42'

@company.setter
def company(self, new_company):
    #set company here
Run Code Online (Sandbox Code Playgroud)

这样做有相对无痛的方法吗?我希望使用属性getter/setter,但考虑到当前的实现,我想避免触及底层数据存储.

Nic*_*ina 7

您可以通过在Property()构造函数中指定name ="xx"参数来更改类级属性名称,同时保留基础NDB属性名称

所以这样的事情可以做到:

class User(ndb.Model):
  company_   = ndb.KeyProperty(name="company", repeated=True)

  @property
  def company(self):
    return self.company_

  @company.setter
  def company(self, new_company):
    self.company_ = new_company
Run Code Online (Sandbox Code Playgroud)

所以现在你随时访问.company_ NDB实际上会在内部设置/获取"公司" ...你不必进行任何数据迁移