我有一个 sqlalchemy(实际上是 Flask-sqlalchemy,因此是所有 db.*),我希望能够通过它们相关的“投票”的平均投票值对我的“事物”进行排序。投票的值为 0 到 100。
遇到 sqlalchemy 想将 average_vote_value @attribute 转换为 sql 的问题并且失败后,我发现我可能应该使用混合:
但是,我无法弄清楚在这种情况下是如何完成的。有人可以帮忙吗?
class Thing(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
votes = db.relationship('Vote', backref='thing', lazy='dynamic')
@hybrid_property
def average_vote_value(self):
'''average of vote.values'''
values = [v.value for v in self.votes]
try:
return sum(scores) / len(values)
except ZeroDivisionError:
return 50 # the default value
average_vote_value.expression
def average_vote_value(cls):
pass ### help ###
class Vote(db.Model):
id = db.Column(db.Integer, primary_key=True)
thing_id = db.Column(db.Integer, db.ForeignKey('thing.id'))
value = db.Column(db.Float, default=50.0)