我有一个所有联系人的多态代码
from google.appengine.ext import ndb
from google.appengine.ext.ndb import polymodel
class Contact(polymodel.PolyModel):
telephone = ndb.StructuredProperty(Telephone, repeated=True)
email = ndb.StructuredProperty(Email, repeated=True)
电话和电子邮件模型类有两个简单的StringProperty
属性:type
和value
。
我有一个使用此格式的模型Person
:
class Person(Contact):
name = ndb.StringProperty()
我想使用投影来减少输出量。所以当我查询父项的属性(即polymodel)时,例如:
qry = Person.query(projection=['telephone.value'])
一切正常。但是,如果我查询Person
类的属性,(任何一个)
qry = Person.query(projection=['name'])
qry = Person.query(projection=[Person.name])
我收到InvalidPropertyError: Unknown property name
例外。
这是一个ndb的bug,可以查看那种类而不是实际的类吗?
如果有办法,请告诉我(当然一个是不使用多态代码)。感谢。
修改
下面我介绍一个更简单的模型(删除StructuredProperty
),它给出了同样的问题:
class Contact(polymodel.PolyModel):
telephone = ndb.StringProperty()
class Person(Contact):
name = ndb.StringProperty()
这有效:
qry = Person.query(projection=['telephone'])
这不起作用:
qry = Person.query(projection=['name'])
答案 0 :(得分:1)
尝试将StructuredProperty与PolyModel结合起来存在很多问题 - 例如,请参阅ndb.StructuredProperty not calling ndb.PolyModel subclass methods和AppEngine NDB PolyModel getting properties。
基本上,PolyModel和StructuredProperty的设计倾向于排除它们的组合使用。
我知道你的问题是关于投影查询,但这里的基本问题无疑会妨碍投影查询的工作。