私はsqlalchemy(実際にはFlask-sqlalchemy、したがってすべてのdb.*)を持っており、関連する「Votes」の平均vote.valueで「Things」をソートできるようにしたいと考えています。投票の値は 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)