我有两个模型,Student和TestResult,它们通过两个表上的student_id通过一对多关系链接。一个学生可以有很多测试结果,或者(这就是问题开始的地方......)根本没有测试结果。
我在TestResult上使用@hybrid_property创建了一个计算列,告诉我当前的结果是什么,我在学生模型中添加了另一列,告诉我该特定学生是否有当前的测试结果,即学生.test_taken =如果他们今天参加了测试,则为真。
我的问题在于没有current_result的学生。我已经使用了下面的代码,但这似乎过于复杂的纯SQL,这是一个非常简单的问题。我已经尝试过重写作为一个合并,但我不能像我期望的那样让它工作,而且我甚至不确定我是否以正确的方式解决这个问题。
有人可以建议我是否正确接近,如果没有,请帮助我找到更好的解决方案吗?
class TestResult(db.Model):
__tablename__ = 'testresult'
result_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
student_id = db.Column(db.ForeignKey('students.studentid'))
test_date = db.Column(db.Date)
test_result = db.Column(db.String)
@hybrid_property
def current_result(self):
if self.test_date = datetime.today:
return True
else:
return False
@current_result.expression
def current_result(self):
return case([
(self.test_date = func.now(), True)
], else_ = False)
class Student(db.Model):
__tablename__ = 'student'
student_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
firstname = db.Column(db.String)
surname = db.Column(db.String)
class = db.Column(db.String)
test_taken = column_property(
select([
case([(exists().where(and_(
student_id == TestResult.student_id,
TestResult.current_result == True,
)).correlate_except(TestResult), True)],
else_=False,
)
])
)
test_results = relationship('TestResult', backref='student')