Сборная команда может быть развернута с течением времени для нескольких проектовКак эффективно создавать подзапросы app-engine-ndb для свойств связанных объектов KeyProperty?
В этом примере я хочу запросить команды, назначенные только для «активных» проектов. Код, который я использую, работает, но я хотел бы знать, есть ли более эффективные/компактные средства для этого.
Модели
class Team(ndb.Model):
"""Model for representing an project team."""
teamid = ndb.StringProperty(required=True)
project = ndb.KeyProperty(kind='Project', required=True, repeating=True)
class Project(ndb.Model):
"""Model for representing a Project"""
name = ndb.StringProperty(required=True)
status = ndb.StringProperty(required=True)
Запрос
status = 'active'
project_query = Project.query()\
.filter(Project.status == status)
active_projects = project_query.fetch(1000, keys_only=True)
team_query = Team.query().order(Team.teamid)\
.filter(Team.projectid.IN(active_projects))
results = team_query.fetch(max_results, offset=start_at)
Компактная форма (по существу то же самое)
team_query = Team.query().order(Team.teamid)\
.filter(Team.projectid.IN(Project.query().filter(Project.status == status)
.fetch(1000, keys_only=True)))
Есть ли лучший способ?
Проверка [Appstats] (https: // облако .google.com/appengine/docs/python/tools/appstats? hl = ru) будет вашим лучшим способом сказать наверняка. Вы должны обязательно выполнить запрос 'keys_only =' для активных проектов, а затем использовать эти ключи в запросе для 'Team'. –
вот что я делаю уже. компактная форма не отличается от сравнения - мне было интересно, есть ли принципиально другой способ справиться с ней. – Jonathon
Нет, ваш путь наиболее эффективен с учетом контекста в вашем сообщении. –