Appengine ndb动态选择

时间:2018-04-19 11:20:23

标签: google-app-engine nosql app-engine-ndb google-app-engine-python

如何在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'退出。

1 个答案:

答案 0 :(得分:1)

您的代码中有一个拼写错误导致您提到的错误:

(keys-only=True)

应该是

(keys_only=True)

此外,该论点需要传递给.fetch(),而不是传递给.query()

choices=Choice.query().fetch(keys_only=True)

但无论如何,以这种方式获取选择列表是不可能的,在ndb模型定义级别定义它不是动态的。

您可以在应用程序级别实现它,获取可用选项列表,并在choices之前检查要添加到.put()属性的值。如果您需要在事务上执行此操作可能有点棘手,因为您无法在事务内进行(非祖先)查询。为了解决类似的问题,我使用memcache来存储通过查询获得的选择列表(在事务之外)并从事务内部获取它。