Имейте класс Run, который имеет отношение "имеет много" к тегу класса.Мне нужно иметь возможность фильтровать прогоны на основе функции тегов (tag_collection).
Ниже приведен фрагмент моего кода.В этом случае я использую автомаппер, но я не думаю, что это имеет большое значение.
Base = automap_base()
class Run(Base):
__tablename__ = 'runs'
macro_id = Column(ForeignKey('macros.id'))
@hybrid_property
def tag_count(self):
return(len(self.tag_collection))
@hybrid_property
def default_region(self):
return(reduce(lambda memo, t: memo or t.name == "region" and t.value == "default", self.tag_collection, False))
@default_region.expression
def default_region(cls):
# how do I do the query here?
class Tag(Base):
__tablename__ = 'tags'
run_id = Column(ForeignKey('runs.id'))
Если я получу экземпляр Run, я могу использовать свойство default_region
, нокогда я запускаю запрос и пытаюсь фильтровать, используя свойство default_region
, я либо получаю класс Run, переданный (как self) в @hybird_property
украшенный default_region
метод, либо получаю @default_region.expression
украшенный default_region
метод, который также получает класс Run.
Пример запроса:
session.query(Run).filter(Run.default_region == True).all()
Я думаю, что мне нужно сделать запрос в @default_region.expression
украшенном default_region
методе, но яне вижу, как получить ручку на сессии.Я знаю о Session.object_session(someobject)
, но я думаю, что someobject
должен быть экземпляром класса orm, а не самого класса.
Я думаю, что я либо совершенно ошибочен в моей методологии фильтрации, либо мне нужнокаким-то образом получить дескриптор объекта сеанса в этом @default_region.expression
украшенном default_region
методе.
Есть ли лучший способ выполнить эту фильтрацию?
Как получить сеанс в@default_region.expression
оформленный default_region
метод?