Вы не можете фильтровать по ключу. К сожалению, я ошибался. Вы можете фильтровать ключ и другие свойства одновременно, если у вас настроен индекс для его обработки. Это будет выглядеть так:
key = db.Key.from_path('MyModel', 'keyname')
MyModel.all().filter("__key__ =", key).filter('foo = ', 'bar')
Вы также можете найти ряд моделей по их ключам, идентификаторам ключей или именам ключей с помощью семейства методов get
.
# if you have the key already, or can construct it from its path
models = MyModel.get(Key.from_path(...), ...)
# if you have keys with names
models = MyModel.get_by_key_name('asdf', 'xyz', ...)
# if you have keys with IDs
models = MyModel.get_by_id(123, 456, ...)
Таким образом вы можете получить множество сущностей. Я не знаю точного предела. Если какой-либо из ключей не существует, вы получите None
в списке для этого объекта.
Если вам нужно отфильтровать какое-либо свойство, а также ключ, вам придется сделать это в два этапа. Либо извлеките ключи и проверьте свойство, либо запросите свойство и проверьте ключи.
Вот пример фильтрации после выборки. Обратите внимание, что вы не используете метод filter
класса Query. Вместо этого просто отфильтруйте список.
models = MyModels.get_by_key_name('asdf', ...)
filtered = itertools.ifilter(lambda x: x.foo == 'bar', models)
person
Luke Francl
schedule
08.02.2011