Python 在相关模型上过滤模型仍显示;过滤掉;相关对象
一个Python 在相关模型上过滤模型仍显示;过滤掉;相关对象,python,sqlalchemy,Python,Sqlalchemy,一个体育课有许多课程。我只希望能够得到可用的课程 我尝试了以下方法: 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")
体育课
有许多课程
。我只希望能够得到可用的课程
我尝试了以下方法:
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并简化):
为什么取消的课程也在结果集中?我如何才能只获得每门课的可用课程?您将加入/筛选与加载相关对象混为一谈。您当前的查询正在筛选
SportsClass
,以确保至少有一门课程是可预订的
或等待列表的
。但是,这并不影响关系加载的内容,关系与加载查询结果是分开处理的
相反,您可能希望第二个关系只显示未取消的类。然后将该关系的内容放入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
)
(我在猜测您的模型定义,但关键部分是定义并使用最后与
课程
的额外关系。)您将加入/过滤与加载相关对象混淆了。您当前的查询正在筛选SportsClass
,以确保至少有一门课程是可预订的
或等待列表的
。但是,这并不影响关系加载的内容,关系与加载查询结果是分开处理的
相反,您可能希望第二个关系只显示未取消的类。然后将该关系的内容放入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
)
(我在猜测您的模型定义,但关键部分是定义并使用最后与
课程
的额外关系。)您将加入/过滤与加载相关对象混淆了。您当前的查询正在筛选SportsClass
,以确保至少有一门课程是可预订的
或等待列表的
。但是,这并不影响关系加载的内容,关系与加载查询结果是分开处理的
相反,您可能希望第二个关系只显示未取消的类。然后将该关系的内容放入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
)
(我在猜测您的模型定义,但关键部分是定义并使用最后与
课程
的额外关系。)您将加入/过滤与加载相关对象混淆了。您当前的查询正在筛选SportsClass
,以确保至少有一门课程是可预订的
或等待列表的
。但是,这并不影响关系加载的内容,关系与加载查询结果是分开处理的
相反,您可能希望第二个关系只显示未取消的类。然后将该关系的内容放入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
)
(我在猜测您的模型定义,但关键部分是在最后定义并使用与课程
的额外关系。)