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 来存储通过查询(在事务之外)获得的选择列表,并在事务中从那里获取它。
如何在 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 来存储通过查询(在事务之外)获得的选择列表,并在事务中从那里获取它。