GAE NDB с Proto Datastore для конечных точек: фильтр по идентификатору ссылочного свойства
Я создал модель под названием Building
со ссылкой на модель под названием Office
, Я хотел бы отфильтровать Building
с OfficeID
в Proto REST Query (@Building.query_method
....)
В настоящее время я работаю с office_key
свойство (необходимо ввести Entity Key of 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
1 ответ
Похоже, что Building -> Office - это отношение один к одному (и наоборот, отношение office -> building - это много к одному.
Таким образом, вам нужно хранить идентификатор офиса в здании как кэшированное свойство для запросов.
Затем вы можете запросить здания с определенным идентификатором офиса.
Поочередно запросите все здания, которые хранятся в ключе office_key == "некоторый офисный ключ")