Appengine ndb 动态选择

Appengine ndb dynamic choices

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

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

(keys-only=True)

应该是

(keys_only=True)

此外,该参数需要传递给 .fetch(),而不是 .query():

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

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

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