在相关模型上过滤模型仍然会显示“过滤掉”的相关对象

2024-04-27 21:13:26 发布

您现在位置:Python中文网/ 问答频道 /正文

一个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",
      }
    ],
  }
]

为什么取消的课程也在结果集中?我怎样才能得到每节课的可用课程


Tags: 方法namedbdescriptionfilterquery课程classes
1条回答
网友
1楼 · 发布于 2024-04-27 21:13:26

将连接/筛选与加载相关对象混淆。您当前的查询正在筛选SportsClass,以确保其课程中至少有一个是'bookable''waitingList'。但是,这并不影响关系加载的内容,关系与加载查询结果是分开处理的

相反,您可能希望第二个关系只显示未取消的类。然后将该关系的内容放在JSON输出中,而不是放在“full”关系中

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的额外关系。)

相关问题 更多 >