查询嵌套的KeyProperties

时间:2016-07-28 15:31:33

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我有以下型号:

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中的任何字段进行查询。

1 个答案:

答案 0 :(得分:1)

您需要对异常化并存储冗余信息,因为数据存储区不支持连接。

例如,鉴于上述模型,用户只能是一家公司的成员,如果您确实需要搜索其用户是特定公司成员的所有对象,则将公司密钥存储在对象中。

如果最适合您,请使用计算属性。

或者使用一个始终将User作为参数并以这种方式构造Object的工厂。