App Engine将项目附加到ListProperty

ofk*_*fko 5 python google-app-engine google-cloud-datastore

我想我已经失去了理智,为什么不做以下工作呢?

class Parent(db.Model):
    childrenKeys = db.ListProperty(str,indexed=False,default=None)

p = Parent.get_or_insert(key_name='somekey')
p.childrenKeys = p.childrenKeys.append('newchildkey')
p.put()
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

BadValueError: Property childrenKeys is required
Run Code Online (Sandbox Code Playgroud)

医生说:

default是list属性的默认值.如果为None,则默认为空列表.list属性可以定义自定义验证器以禁止空列表.

所以我看到它的方式,我得到默认值(一个空列表)并为其添加一个新值并保存它.

sys*_*out 8

你应该删除p.childrenKeys作业:

class Parent(db.Model):
    childrenKeys = db.ListProperty(str,indexed=False,default=[])

p = Parent.get_or_insert('somekey')
p.childrenKeys.append('newchkey')
p.put()
Run Code Online (Sandbox Code Playgroud)


Dan*_*son 5

替换这个:

p.childrenKeys = p.childrenKeys.append('newchildkey')
Run Code Online (Sandbox Code Playgroud)

有了这个:

p.childrenKeys.append('newchildkey')
Run Code Online (Sandbox Code Playgroud)

append()返回None,无法分配p.childrenKeys.

  • p.childrenKeys确实返回一个空列表.p.childrenKeys.append()返回None,因为这是列表的append()方法的行为.这里的问题是将无分配给p.childrenKeys,这是ListProperty不允许的.(您可以将空列表分配给ListProperty,在数据存储区中,该列表不具有该名称的属性.) (2认同)