Как я могу получить ndb.Model, когда мой единственный вход – ndb.Query?

Предположим, что ndb.Model выглядит так:

 class Foo(ndb.Model): bar = ndb.StringProperty() 

Мой вопрос: если мой единственный вход – это Foo.query() как я могу получить модель как объект, к которому принадлежит этот запрос?

 def query_to_model(query): # some magic return model 

Foo.query().kind возвращает имя модели в виде строки, но мне не удалось найти способ получить ее как объект.

Следующие действия используются с использованием eval , но только тогда, когда модель определена в том же файле:

 def query_to_model(query): return eval(query.kind) 

Я хочу нечто более общее, чем это.

2 Solutions collect form web for “Как я могу получить ndb.Model, когда мой единственный вход – ndb.Query?”

После того, как вы импортировали код с этим определением модели, список ndb.Model._kind_map должен содержать его. Вот волшебство:

 def query_to_model(query): return ndb.Model._kind_map[query.name] 

Я использую этот код для поиска класса модели, если у вас есть имя вида:

 model_module = KIND_MODULES(kind_name) mod = __import__(model_module, globals(), locals(), [kind_name], -1) model_class = getattr(mod, kind_name) 

Модули KIND Modules dict содержат модули для импорта моделей из:

 KIND_MODULES = { 'Users' : 'models', 'Comments' : 'models', 'Cities' : 'examples.models' } 
  • Получение имени и расширения загруженного файла с помощью python (движок Google)
  • Отображение изображений Blob в Python (App Engine)
  • Переадресация фляж на GAE
  • Работа с предками в GAE
  • Как использовать пользовательские библиотеки и приложения python в Google App Engine?
  • Как я могу запросить локальный url в приложении приложения для приложений?
  • проблемы с psycopg2 на движке Google Apps
  • Метод ndb to_dict не включает ключ объекта
  • Python - лучший язык программирования в мире.