我试图按(降序)average_score排序,但当我运行它时,我得到错误:名称'average_score'未定义。我哪里做错了?
错误:name 'average_score'没有定义
模型:
def _get_average_rating(self):
reviews = Ratings.objects.filter(post=self)
average = reviews.aggregate(Avg('score'))['score__avg']
average = round(average, 1)
return average
average_score = property(_get_average_rating)
视图:
if sort == 'Average Rating':
Posts = Posts.order_by(-average_score)
尝试使用这个:-
views.py
Posts = Post.objects.all().order_by('-average_score')
您没有显示完整的view
。因此很难猜测您是否使用id
到filter objects
。
*注意:-.all()
将从您的Post模型中获取所有对象。
首先,您不能在ORM查询中使用方法。其次,你会得到错误,因为没有名为average_score
的变量存在于该作用域中。
需要在中添加逻辑您的查询,而不是尝试使用方法。
Post.objects.all().annotate(average_score=Avg('ratings__score')).order_by('-average_score')
注意:不要用python排序,你的数据库可以做得更有效率。
注意:模型名应该是单数所以
Rating
代替Ratings
我找到了答案:
使用python的Sorted
方法:
Posts = sorted(Posts, key=lambda x: x.average_score, reverse=True)