Flask 如何使用检查列表中是否存在值的筛选器进行查询?

Flask 如何使用检查列表中是否存在值的筛选器进行查询?,flask,filter,sqlalchemy,contains,Flask,Filter,Sqlalchemy,Contains,我正在制作一个bug跟踪器,这样每个用户都可以有多个项目,每个项目都可以记录多个bug。我希望用户能够看到自上次登录以来,在所有项目中报告了多少新的bug 我构建了一个用户模型、一个项目模型和一个bug模型。我已将三个模型及其相关列包括在下面: class Users(db.Model, UserMixin): id = db.Column(db.Integer, primary_key = True, nullable = False) # ... last_login

我正在制作一个bug跟踪器,这样每个用户都可以有多个项目,每个项目都可以记录多个bug。我希望用户能够看到自上次登录以来,在所有项目中报告了多少新的bug

我构建了一个用户模型、一个项目模型和一个bug模型。我已将三个模型及其相关列包括在下面:

class Users(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key = True, nullable = False)
    # ...
    last_login = db.Column(db.DateTime, nullable = False)
    # AS PARENT
    owned_projects = db.relationship('Projects', backref="project_owner")

class Projects(db.Model):
    id  = db.Column(db.Integer, primary_key = True, nullable = False)
    # ...
    # AS CHILD
    owner = db.Column(db.Integer, db.ForeignKey('users.id'))
    # AS PARENT
    bugs = db.relationship('Bugs', backref = 'containing_project')

class Bugs(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    # ...
    status = db.Column(db.String(20))
    report_date = db.Column(db.DateTime, index = True, default = dt.datetime.now())
    # AS CHILD
    project = db.Column(db.Integer, db.ForeignKey('projects.id'))
要在Bugs查询中筛选自用户上次登录以来报告的Bugs,我可以执行类似于
Bugs.query.filter(Bugs.report\u date>current\u user.last\u login)
的筛选。这显示了来自所有用户的所有bug,但是我在构建一个查询时遇到了麻烦,这个查询只会过滤掉用户拥有的项目中的bug

.filter(Bugs.containing\u project在当前用户所有的\u projects中)
返回“”,但我不知道如何使用它。我读过,但方向不对,
当前用户.owned\u projects.contains(bug.project)
不起作用

我还尝试了
.filter(Bugs.containing_project.owner==当前_user.id)
,但出现了一个错误“AttributeError:与Bugs.containing_project相关联的'InstrumentedAttribute'对象和'Comparator'对象都没有属性'owner'

我现在能想到的唯一选择是迭代每一个bug,找到属于用户拥有的项目的bug,但这在性能方面是噩梦。在方法或类似的东西中肯定有一个


请告诉我如何才能做到这一点,提前感谢

此代码不起作用

.filter(Bugs.containing_project.any(Projects.id.in_([ proj['id'] for proj in current_user.owned_projects])
我参考了这个网站。

而且,如果我的答案不奏效,这个网站可能会帮助你。

谢谢!我稍微更改了您的建议-
.filter(bug.containing\u project.has(Projects.id.in\u([proj.id for proj in current\u user.owned\u Projects]))
。我的模型没有使用多对多关系,因此
Projects
是不可订阅的,我不能使用
任何
方法。相反,我使用的是
.has
,这似乎很有效!对于可能遇到您的答案的任何其他人,您是否可以在代码块中添加2“)”以关闭所有括号?再次感谢!