我有以下型号:
class Company(ndb.Model):
name = ndb.StringProperty(indexed=False)
# some other fields
class User(polymodel.PolyModel):
company = ndb.KeyProperty(kind=Company)
# some other fields
class Object(ndb.Model):
user = ndb.KeyProperty(kind=User)
# some other fields
现在我有一个user
,我想查询与同一公司中的其他Objects
相关联的Users
,如下所示:
Object.query(Object.user.company == user.company)
当然,这不起作用,因为Object.user
是关键,除此之外我无法访问任何内容。
有什么办法吗?我只需要公司密钥,我正在考虑ComputedProperty
,但我不确定它是否是最佳解决方案。此外,最好根据company
中的任何字段进行查询。
答案 0 :(得分:1)
您需要对异常化并存储冗余信息,因为数据存储区不支持连接。
例如,鉴于上述模型,用户只能是一家公司的成员,如果您确实需要搜索其用户是特定公司成员的所有对象,则将公司密钥存储在对象中。
如果最适合您,请使用计算属性。
或者使用一个始终将User作为参数并以这种方式构造Object的工厂。