有没有办法将 NDB 种类作为字符串传递?
Is there any way to pass NDB kind as string?
目前我使用如下代码 -
Price.query().fetch(keys_only=True))
这里的Price
是硬编码的种类名称。有什么办法可以得到类似的东西:
def get_kind_keys(kindname):
return Kind(kindname).query().fetch(keys_only=True)
ndb
所有机型保持一个dict
,大家可以自己试试:
from google.appengine.ext import ndb
print ndb.Model._kind_map
您的代码片段最终将如下所示:
def get_kind_keys(kindname):
return ndb.Model._kind_map[kindname].query().fetch(keys_only=True)
ndb.Query
在其构造函数中接受一个种类。您可以将 get_kind_keys
实现为:
def get_kind_keys(kindname):
return ndb.Query(kind=kindname).fetch(keys_only=True)
使用 _kind_map
更有吸引力的是,如果您使用 PolyModel
,对模型调用 query()
将正确过滤所需的 class。否则,这两个解决方案是等价的。您可以查看 source code 与 Model._query
的区别,以了解确切的区别。
目前我使用如下代码 -
Price.query().fetch(keys_only=True))
这里的Price
是硬编码的种类名称。有什么办法可以得到类似的东西:
def get_kind_keys(kindname):
return Kind(kindname).query().fetch(keys_only=True)
ndb
所有机型保持一个dict
,大家可以自己试试:
from google.appengine.ext import ndb
print ndb.Model._kind_map
您的代码片段最终将如下所示:
def get_kind_keys(kindname):
return ndb.Model._kind_map[kindname].query().fetch(keys_only=True)
ndb.Query
在其构造函数中接受一个种类。您可以将 get_kind_keys
实现为:
def get_kind_keys(kindname):
return ndb.Query(kind=kindname).fetch(keys_only=True)
使用 _kind_map
更有吸引力的是,如果您使用 PolyModel
,对模型调用 query()
将正确过滤所需的 class。否则,这两个解决方案是等价的。您可以查看 source code 与 Model._query
的区别,以了解确切的区别。