【发布时间】:2018-08-11 21:26:01
【问题描述】:
我正在尝试按降序计算游戏的平均评分和顺序。 在我的 models.py 中,我定义了一个混合属性
class Review(db.Model):
id = db.Column(db.Integer, primary_key=True)
rating = db.Column(db.Numeric(precision=2, scale=1), index=True)
body = db.Column(db.String(140))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
game_id = db.Column(db.Integer, db.ForeignKey('game.id'))
class Game(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255), index=True, unique=True)
reviews = db.relationship('Review', backref='game', lazy='dynamic')
@hybrid_property
def avg_rating(self):
total_rating = 0
reviews = Review.query.filter_by(game_id=self.id).all()
for review in reviews:
total_rating += review.rating
return total_rating / len(reviews)
但是当我尝试在我的 routes.py 中查询平均评分时
games = Game.query.order_by(Game.avg_rating.desc())
我收到此错误
AttributeError: 'decimal.Decimal' object has no attribute 'desc'
我可能需要在我的 models.py 中做这样的事情,但是怎么做?
@avg_rating.expression
def avg_rating(cls):
# what to write here
【问题讨论】:
标签: python python-3.x flask sqlalchemy flask-sqlalchemy