获取 flask 博客的平均评分,SQL,Python
Get the average rating in flask blog, SQL, Python
我正在使用 SQL-alchemy 和 Python 创建一个 Flask 博客。该博客是一个食谱博客,用户可以在其中对食谱进行评分。我得到了所有的评级,但我也想得到平均评级。到目前为止我已经试过了,但我无法让它工作...
在我的 HTML:
<div id="recipe" class="row">
<div class="col">
<ul class="list-group">
<li class="list-group-item"><strong>Average Rating: </strong>{{ post.critic_avg }}</li>
</ul>
</div>
在我的路线文件中:
@app.route("/recipes/<int:recipe_id>")
def recipe(recipe_id):
recipe = Recipe.query.get_or_404(recipe_id)
form = RatingForm()
critic_avg = db.session.query(func.avg(Rating.rating)).all()
return render_template('recipe_page.html', title=recipe.title, post=recipe, form=form, critic_avg=critic_avg)
在我的模型中:
class Rating(db.Model):
id = db.Column(db.Integer, primary_key=True, nullable=False)
rating = db.Column(db.Integer, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
user = db.relationship(User, backref=db.backref('ratings', lazy=True))
recipe_id = db.Column(db.Integer, db.ForeignKey('recipe.id'), nullable=False)
recipe = db.relationship(Recipe, backref=db.backref('ratings', lazy=True))
def __repr__(self):
return f"<Rating (id='{self.id}', rating='{self.rating}', user_id='{self.user_id}', recipe_id='{self.recipe_id}')>"
也许我做的完全错了,很高兴得到一些指导:)
两件事,
首先,all()
将 return 列表中包含单个项目,在这种情况下,您可以使用 scalar()
来获得单个值
critic_avg = db.session.query(func.avg(Rating.rating)).scalar() or 0
并且在神社中,您尝试使用 post.critic_avg
访问 critic_avg
,而使用 post 不可用,您将其作为 critic_avg
传递给神社,因此,在神社中你可以直接访问它
<li class="list-group-item"><strong>Average Rating: </strong>{{ critic_avg }}</li>
https://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.scalar
我正在使用 SQL-alchemy 和 Python 创建一个 Flask 博客。该博客是一个食谱博客,用户可以在其中对食谱进行评分。我得到了所有的评级,但我也想得到平均评级。到目前为止我已经试过了,但我无法让它工作...
在我的 HTML:
<div id="recipe" class="row">
<div class="col">
<ul class="list-group">
<li class="list-group-item"><strong>Average Rating: </strong>{{ post.critic_avg }}</li>
</ul>
</div>
在我的路线文件中:
@app.route("/recipes/<int:recipe_id>")
def recipe(recipe_id):
recipe = Recipe.query.get_or_404(recipe_id)
form = RatingForm()
critic_avg = db.session.query(func.avg(Rating.rating)).all()
return render_template('recipe_page.html', title=recipe.title, post=recipe, form=form, critic_avg=critic_avg)
在我的模型中:
class Rating(db.Model):
id = db.Column(db.Integer, primary_key=True, nullable=False)
rating = db.Column(db.Integer, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
user = db.relationship(User, backref=db.backref('ratings', lazy=True))
recipe_id = db.Column(db.Integer, db.ForeignKey('recipe.id'), nullable=False)
recipe = db.relationship(Recipe, backref=db.backref('ratings', lazy=True))
def __repr__(self):
return f"<Rating (id='{self.id}', rating='{self.rating}', user_id='{self.user_id}', recipe_id='{self.recipe_id}')>"
也许我做的完全错了,很高兴得到一些指导:)
两件事,
首先,all()
将 return 列表中包含单个项目,在这种情况下,您可以使用 scalar()
来获得单个值
critic_avg = db.session.query(func.avg(Rating.rating)).scalar() or 0
并且在神社中,您尝试使用 post.critic_avg
访问 critic_avg
,而使用 post 不可用,您将其作为 critic_avg
传递给神社,因此,在神社中你可以直接访问它
<li class="list-group-item"><strong>Average Rating: </strong>{{ critic_avg }}</li>
https://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.scalar