如何在Google APpengine ndb中实现动态选择?
class Choice(ndb.Model):
name = ndb.StringProperty()
class List(ndb.Model):
choices = ndb.KeyProperty(Choice, choices=Choice.query(keys_only=True).fetch(), repeated=True)
此代码以TypeError: __init__() got an unexpected keyword argument 'keys_only'
退出。
答案 0 :(得分:1)
您的代码中有一个拼写错误导致您提到的错误:
(keys-only=True)
应该是
(keys_only=True)
此外,该论点需要传递给.fetch()
,而不是传递给.query()
:
choices=Choice.query().fetch(keys_only=True)
但无论如何,以这种方式获取选择列表是不可能的,在ndb模型定义级别定义它不是动态的。
您可以在应用程序级别实现它,获取可用选项列表,并在choices
之前检查要添加到.put()
属性的值。如果您需要在事务上执行此操作可能有点棘手,因为您无法在事务内进行(非祖先)查询。为了解决类似的问题,我使用memcache来存储通过查询获得的选择列表(在事务之外)并从事务内部获取它。