是的,但您需要使用EndpointsAliasProperty
与字段不同的名称lastmodified
。例如,您可以执行类似于在 Google I/O 2013 上用作示例的Picturesque 应用程序中所做的事情。
首先,定义你的模型
from google.appengine.ext import ndb
from endpoints_proto_datastore.ndb import EndpointsModel
class MyModel(EndpointsModel):
attr1 = ndb.StringProperty()
lastmodified = ndb.DateTimeProperty()
然后创建一个别名属性,用于更新查询
from google.appengine.ext import endpoints
from endpoints_proto_datastore.ndb import EndpointsAliasProperty
...
@EndpointsAliasProperty(name='modifiedSince', setter=ModifiedSinceSet)
def ModifiedSince(self):
raise endpoints.BadRequestException(
'modifiedSince value should never be accessed.')
这个属性永远不会被访问,但它的 setter 与我们想要的查询排序相关,所以我们需要定义ModifiedSinceSet
(它需要在变量是引用之前出现,如在示例中):
import datetime
from endpoints_proto_datastore import utils
...
def ModifiedSinceSet(self, value):
try:
modified_since = utils.DatetimeValueFromString(value)
if not isinstance(modified_since, datetime.datetime):
raise TypeError('Not a datetime stamp.')
except TypeError:
raise endpoints.BadRequestException('Invalid timestamp for modifiedSince.')
self._endpoints_query_info._filters.add(
MyModel.lastmodified >= modified_since)
在这里,我们将传入的值(来自请求)转换为datetime.datetime
对象,然后使用它self._endpoints_query_info._filters
在当前EndpointsModel
对象上添加过滤器。
这_endpoints_query_info
当然用于创建query_method
传递给您的方法的查询。
另一种选择:
您可以只解析值并使用引入您自己的语法。例如,接受类似的字符串lastmodified>=TIMESTAMP
,然后解析语句中的时间戳。