Как отфильтровать relationship rows в flask-sqlalchemy
Есть 2 связаные таблицы, подскажите как нужно связать модели и сделать запрос для того чтоб получить First по key в котором Second будет отфильтровано по необходимому language.
class First(db.Model):
__tablename__ = 'first'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
key = db.Column(db.String(128), unique=True)
second = db.relationship("Second")
def __repr__(self):
return '<First %r>' % self.key
class Second(db.Model):
__tablename__ = 'second'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
language = db.Column(db.String(6), nullable=False)
title = db.Column(db.String(64), nullable=False)
first_id = db.Column(db.Integer, db.ForeignKey('first.id'), nullable=False, index=True)
first = db.relationship('First', backref='second_firsts', foreign_keys=[first_id])
def __repr__(self):
return '<Second %r>' % self.id
При:
Cv.query.filter(Cv.key == key).first()
Я получаю:
{
"key": "firts",
"second": [
{
"language": "eng",
"title": "EngTitle"
},
{
"language": "rus",
"title": "RusTitle"
}
]
}
А хотелось бы с отфильтрованым language.
Ответы (1 шт):
Автор решения: Bor-is-luv
→ Ссылка
first = First.query.filter(First.key == key).first() # получаем first по key
second = first.second # записываем в second все объекты second, связанные с first
filter_second = list(filter(lambda sec: sec.language == 'eng', second))
# функция filter проходится lambda-функцией по каждому элементу из second
# и записывает в filter_second, если выполняется условие sec.language == 'eng'