使用默认值将空列表分配给StringListProperty会导致实体具有默认值?

时间:2013-04-02 13:40:13

标签: python google-app-engine google-cloud-datastore

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

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

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

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

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'] ???

1 个答案:

答案 0 :(得分:0)

值得注意的是,使用NDB(较新的数据存储区API),重复,必需和默认是互斥的。也就是说,重复属性(例如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类似的情况。