2

下面的完整工作示例可以在交互式控制台中运行。

这是预期的吗?如果是这样,我有两个问题:

1) 请在 GAE 文档中说明这一点。

2)请显示一个模式,该模式在创建db.Model时默认为某些属性的填充列表,但仍允许我们稍后分配空列表(或无)。

from google.appengine.ext import db

class TestClass(db.Model):
    my_string_list = db.StringListProperty(default=['foo', 'bar'])

instance = TestClass()
instance.put()

print instance.my_string_list
#['foo', 'bar']

instance.my_string_list = []
instance.put()
print instance.my_string_list
#[]

instance2 = db.get(instance.key())
print instance2.my_string_list
#expected [], got ['foo', 'bar'] ???
4

1 回答 1

0

值得注意的是,对于 NDB(较新的数据存储 API),repeated、required 和 default 是互斥的。也就是说,重复属性(如 StringListProperty)不能有默认值。也许您需要重新设计,而不是使用默认值,而是创建一个函数来获取模型的新实例:

from google.appengine.ext import db

class TestClass(db.Model):
    my_string_list = db.StringListProperty(default=[])

    @classmethod
    def get_new_instance(cls):
       entity = cls()
       entity.my_string_list = ['foo', 'bar']
       return entity

这一切都假设您打开的错误报告暂时不会得到解决。如果他们在 NDB 上不支持这一点,它可能会变成与旧 DB API 类似的情况。

于 2013-04-02T15:41:15.800 回答