Как выполнять пользовательские запросы в API конечных точек google appengine, используя "endpoints-proto-datastore"?
Обычно мы делаем такие запросы
@MyModel.query_method(path='mymodels', name='mymodel.list')
def MyModelList(self, query):
return query
Но как я могу выполнить пользовательские запросы к модели конечных точек и как передать пользовательские параметры, отличные от "id, limit, order..." и т. Д.
Например:
return query.filter(Student.name == somename )
Как я могу поставить "somename" в конечную точку?
1 ответ
Если свойство, по которому вы хотите выполнить фильтрацию, является частью вашей модели, вы можете просто добавить имя в качестве query_field
@MyModel.query_method(path='mymodels',
name='mymodel.list',
query_fields=('name',))
Это автоматически применит фильтр равенства (MyModel.name == name)
если имя указано в запросе API.
Если вам нужно больше пользовательских запросов, вы можете работать с EndpointsAliasProperty
на вашей модели и прямой доступ к модели _endpoints_query_info._filters
Пример выполнения фильтра неравенства с датой:
class MyModel(EndpointsModel):
...
updated = EndpointsDateTimeProperty(auto_now=True)
...
def MinDateSet(self, value):
if value is not None:
self._endpoints_query_info._filters.add(MyModel.updated >= value)
@EndpointsAliasProperty(setter=MinDateSet,
property_type=message_types.DateTimeField)
def minDate(self):
"""
minDate is only used as parameter in query_methods
so there should never be a reason to actually retrieve the value
"""
return None
@MyModel.query_method(path='mymodels',
name='mymodel.list',
query_fields=('minDate',))
Это автоматически применит MyModel.updated >= minDate
фильтр, если minDate указан в запросе API.