Попытка выполнить самореферентное соединение, которое загружает только определенные экземпляры отношения на «дочерний» узел. Я пытаюсь выполнить sh это с помощью contains eager. Однако, когда я добавляю в запрос, он фильтрует столбец «дочерних» отношений до одного экземпляра, даже если их несколько, соответствующих критериям. См. Пример ниже, где я получаю разные результаты, просто используя contains_eager
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
class Manager(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
location = db.Column(db.String())
same_managers = db.relationship(
"Manager",
primaryjoin=db.and_(db.remote(user_id) == db.foreign(user_id), db.remote(id) != db.foreign(id)),
uselist=True,
)
manager_alias = db.aliased(Manager)
managers = (
db.session.query(Manager).outerjoin((manager_alias, Manager.same_managers))
.filter(manager_alias.location == 'CA')
.options(db.contains_eager(Manager.same_managers.of_type(manager_alias)))
).first()
managers.same_managers == [Manager2] // should be multiple managers.
managers = (
db.session.query(Manager).outerjoin((manager_alias, Manager.same_managers))
.filter(manager_alias.location == 'CA')
).first()
managers.same_managers == [Manager2, Manager3, Manager4]