【发布时间】:2021-01-11 10:41:06
【问题描述】:
我正在制作一个结构化的错误跟踪器,以便每个用户可以拥有多个项目,并且每个项目都可以记录多个错误。我希望用户能够查看自上次登录以来在所有项目中报告了多少新错误。
我将其构建为用户模型、项目模型和错误模型。我在下面列出了三个模型及其相关列:
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.query.filter(Bugs.report_date > current_user.last_login) 的过滤器。这显示了所有用户的所有错误,但我无法构建一个查询,将其过滤为仅用户拥有的项目中的错误。
.filter(Bugs.containing_project in current_user.owned_projects) 返回“current_user.owned_projects.contains(Bugs.project) 不起作用。
我也尝试了.filter(Bugs.containing_project.owner == current_user.id),但收到错误“AttributeError:与 Bugs.containing_project 关联的 'InstrumentedAttribute' 对象和 'Comparator' 对象都没有属性 'owner'”。
我现在能想到的唯一选择是遍历每个错误以找到属于用户拥有的项目的错误,但这在性能方面将是噩梦。肯定有.in 方法或类似的方法吗?
请告知我如何实现这一点,在此先感谢!
【问题讨论】:
标签: flask filter sqlalchemy contains