У меня есть следующие модели:
class CRRun(Base):
...
crID = Column(u'CR_ID', INTEGER(), ForeignKey(CR.id), primary_key=True,
nullable=False)
cr = relationship(CR, backref=backref("CR_RUN", uselist=False))
...
class CR(Base):
...
id = Column(u'CR_ID', INTEGER(), primary_key=True, nullable=False)
state = Column(u'STATE', VARCHAR(20))
...
Затем я пытаюсь сделать следующее:
state = 'some value'
crsRuns = Session.query(CRRun)
crsRuns = crsRuns.options(eagerload('cr'))
.filter(CRRun.cr != None)
.filter(CRRun.cr.state.like('%' + state + '%'))
Однако это вызывает следующую ошибку:
AttributeError: объект 'InstrumentedAttribute' и объект 'Comparator' не имеют атрибута 'state'
Как фильтровать мой запрос по значению столбца в таблице, связанной с таблицей, которую я запрашиваю с помощью внешнего ключа?
В итоге я сделал следующее:
crsRuns = Session.query(CRRun, CR, Run).join(CR).join(Run)
crsRuns = crsRuns.filter(CR.state.like('%' + state + '%'))
Try:
state = 'some value'
crsRuns = Session.query(CRRun)
crsRuns = crsRuns.options(eagerload('cr')) \
.filter(CRRun.cr.has(
CR.state.like('%' + state + '%')
))