如何使用 "endpoints-proto-datastore" 在 google appengine 端点 api 中执行自定义查询?
How to perform custom queries in google appengine endpoints api using "endpoints-proto-datastore"?
通常我们会这样查询
@MyModel.query_method(path='mymodels', name='mymodel.list')
def MyModelList(self, query):
return query
但是我如何在 Endpoints 模型上执行自定义查询以及如何传递 "id, limit, order.." 等以外的自定义参数
例如:
return query.filter(Student.name == somename )
如何向端点提供 "somename"?
如果您要过滤的 属性 是模型的一部分,您只需将 'name' 添加为 query_field
@MyModel.query_method(path='mymodels',
name='mymodel.list',
query_fields=('name',))
如果在 API 请求中提供了名称,这将自动应用相等过滤器 (MyModel.name == name)
。
如果您需要更多自定义查询,您可以在模型上使用 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',))
如果在 API 请求中提供了 minDate,这将自动应用 MyModel.updated >= minDate
过滤器。
通常我们会这样查询
@MyModel.query_method(path='mymodels', name='mymodel.list')
def MyModelList(self, query):
return query
但是我如何在 Endpoints 模型上执行自定义查询以及如何传递 "id, limit, order.." 等以外的自定义参数
例如:
return query.filter(Student.name == somename )
如何向端点提供 "somename"?
如果您要过滤的 属性 是模型的一部分,您只需将 'name' 添加为 query_field
@MyModel.query_method(path='mymodels',
name='mymodel.list',
query_fields=('name',))
如果在 API 请求中提供了名称,这将自动应用相等过滤器 (MyModel.name == name)
。
如果您需要更多自定义查询,您可以在模型上使用 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',))
如果在 API 请求中提供了 minDate,这将自动应用 MyModel.updated >= minDate
过滤器。