所以,让我说我有这个模型:
class User(ndb.Model):
username = ndb.StringProperty(required = True)
一周后,会创建几百个用户实体。现在我想添加另一个字段:
class User(ndb.Model):
username = ndb.StringProperty(required = True)
username_lower = ndb.StringProperty() # username.lower()
我不会要求每个用户输入他们现有用户名的小写版本,那么我如何自己占用每个用户实体的这些字段?
答案 0 :(得分:3)
小写用户名实际上是用于计算属性的示例。
计算属性( ComputedProperty )是只读属性 值由其他属性值计算得出 应用程序提供的功能。计算出的值写入 数据存储,以便可以在数据存储区中查询和显示它 viewer,但在回读实体时会忽略存储的值 来自数据库;相反,通过调用the来重新计算该值 在请求值时运行。例如:
class SomeEntity(ndb.Model):
name = ndb.StringProperty()
name_lower = ndb.ComputedProperty(lambda self: self.name.lower())
x = SomeEntity(name='Nick')
x.name = 'Nick'
assert x.name_lower == 'nick'
x.name = 'Nickie'
assert x.name_lower == 'nickie'
https://developers.google.com/appengine/docs/python/ndb/properties#computed
由于早期模型没有存储值,因此不存在它并不重要,因为它不会直接使用。
答案 1 :(得分:1)
你可以制作一个脚本,运行一次,这样做:
for user in User.query():
user.username_lower = username.lower()
user.put()