Да, но вам нужно использовать EndpointsAliasProperty
с именем, отличным от поля lastmodified
. Например, вы могли бы сделать что-то подобное было сделано в Picturesque app, используемой в качестве образца в Google I/O 2013.
Во-первых, определить вашу модель
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.')
Это свойство никогда не будет доступен, но его сеттер имеет отношение сделать вид запроса на то, что мы хотим, так что мы должны определить ModifiedSinceSet
(она должна предшествовать переменная ссылка , как в the sample):
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
, конечно, используется in query_method
, чтобы создать запрос, который передается вашему методу.
Другой вариант:
Вы можете просто разобрать значение и использовать ввести свой собственный синтаксис. Например, принять строки, такие как lastmodified>=TIMESTAMP
, а затем разобрать временную метку из инструкции.