SportsClass
有很多Courses
。我希望能够只获得可用的课程。
我尝试了以下内容:
sports_classes = db.session.query(SportsClass).join(Course).filter((SportsClass.description.contains(query))|(SportsClass.name.contains(query)))
sports_classes = sports_classes.filter((Course.bookable == "bookable") | (Course.bookable == "waitingList"))
但是,该查询返回的结果是(转换为json并简化):
[
"description": "description",
"courses": [
{
"name": "Name",
"bookable": "waitingList",
},
{
"name": "Keine Angaben",
"bookable": "canceled",
}
],
}
]
为什么取消的课程也在结果集中?我怎样才能获得每堂课的可用课程?
答案 0 :(得分:3)
您在加载/过滤加载相关对象时感到困惑。您当前的查询正在过滤SportsClass
,以确保至少有一个的课程为'bookable'
或'waitingList'
。但是,这不会影响由关系加载的内容,而是与加载查询结果分开处理。
相反,您可能希望第二个关系仅显示未取消的类。然后将该关系的内容放在JSON输出中,而不是“完整”关系。
class SportsClass(db.Model):
# ...
class Course(db.Model):
# ...
sports_class_id = db.Column(db.Integer, db.ForeignKey(SportsClass.id), nullable=False)
sports_class = db.relationship(SportsClass, backref='courses')
SportsClass.available_courses = db.relationship(
Course, primaryjoin=db.and_(
SportsClass.id == Course.sports_class_id,
Course.bookable != 'canceled'
), viewonly=True
)
(我猜你的模型定义,但关键部分是在最后定义并使用与Course
的额外关系。)