【问题标题】:GAE NDB with Endpoints Proto Datastore: filter by ID of reference property带有 Endpoints Proto Datastore 的 GAE NDB:按引用属性的 ID 过滤
【发布时间】:2016-02-06 18:55:18
【问题描述】:

我参照名为Office 的模型创建了一个名为Building 的模型。我想在 Proto REST Query (@Building.query_method ....) 中通过 OfficeID 过滤 Buildings

目前,我使用office_key 属性(需要输入Office 的实体密钥),但我想通过OfficeID 属性进行过滤。关于如何做到这一点的任何想法?

这是我迄今为止尝试过的:

class Building(EndpointsModel):
    _message_fields_schema = ('id', 'name', 'office')
    name = ndb.StringProperty(default=None, indexed=True)
    office_key = ndb.KeyProperty(kind=Office, required=False)

    def office_setter(self, value):
        self.office_key = ndb.Key('Office', value.id)

    @EndpointsAliasProperty(setter=office_setter, property_type=Office.ProtoModel())
    def office(self):
        return self.office_key.get()


class Office(EndpointsModel):
        _message_fields_schema = ('id', 'name', 'created_date')
        name = ndb.StringProperty(default=None, indexed=True)
        created_date = ndb.DateTimeProperty(auto_now_add=True)

@Building.query_method(query_fields=('limit', 'order', 'pageToken', 'office_key'), path='buildings', name='list')
    def List(self, query):
        return query

【问题讨论】:

    标签: python google-app-engine google-cloud-endpoints endpoints-proto-datastore


    【解决方案1】:

    看来Building -> Office 是一对一的关系(相反office -> building 的关系是多对一的。

    因此您需要将办公 ID 存储在建筑物中作为缓存属性以供查询。

    然后您可以查询具有特定办公室 ID 的建筑物。

    交替查询 office_key == 'some office key' 中钥匙持有的所有建筑物

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多