我正在尝试学习/使用GAE-ndb,并且正在为一些应该简单的东西而奋斗。在
假设我有两种类型的实体:
class Cat(ndb.Model):
name = ndb.StringProperty(required = True)
age = ndb.IntegerProperty(required = True)
vicious = ndb.BooleanProperty(required = True)
class Dog(ndb.Model):
name = ndb.StringProperty(required = True)
age = ndb.IntegerProperty(required = True)
willfetch = ndb.BooleanProperty(required = True)
canswim = ndb.BooleanProperty(required = True)
我所要做的是找到一种简单的方法,通过一个单一的函数来交互存储在任何实体中的所有数据,而不考虑实体的名称,或实体内属性的名称或数量。在
我有两个问题;这样做:
^{pr2}$我得到一个错误:
AttributeError: 'module' object has no attribute 'b'
这使我无法以编程方式访问实体(例如从名称列表)。在
然后,即使通过名称引用实体来修复此错误,也无法完全遍历返回的内容:
qry = Cat.query()
for item in qry:
for property in item:
**display data**
…给出一个错误:
TypeError: '<<name>>' object is not iterable
有什么想法吗?我没有在GAE文档或其他地方找到任何东西。在
ndb.Model._kind_map['ModelName']
将返回一个种类名称的类(这通常是一个与模型类相同的字符串)。 给定一个实体类,Entity._properties
将返回其属性的列表。在@ChrisC73,我不能让你的代码正常工作,但是通过借用一些代码,我想出了这个方法,它确实有效,尽管它看起来非常困难(而且计算量很大),做一些应该容易得多的事情。在
一。在
FWIW,您可以轻松返回实体属性的名称:
^{pr2}$…但是它按字母顺序返回它们,这意味着您不能(似乎)依赖属性的返回顺序作为显示顺序。在
像这样的方法应该可以做到:
相关问题 更多 >
编程相关推荐